{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "64c956bb",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c1682ede",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define the LEMCell\n",
    "class LEMCell(nn.Module):\n",
    "    def __init__(self, ninp, nhid, dt):\n",
    "        super(LEMCell, self).__init__()\n",
    "        self.ninp = ninp\n",
    "        self.nhid = nhid\n",
    "        self.dt = dt\n",
    "        self.inp2hid = nn.Linear(ninp, 4 * nhid)\n",
    "        self.hid2hid = nn.Linear(nhid, 3 * nhid)\n",
    "        self.transform_z = nn.Linear(nhid, nhid)\n",
    "        self.reset_parameters()\n",
    "\n",
    "    def reset_parameters(self):\n",
    "        std = 1.0 / np.sqrt(self.nhid)\n",
    "        for w in self.parameters():\n",
    "            w.data.uniform_(-std, std)\n",
    "\n",
    "    def forward(self, x, y, z):\n",
    "        transformed_inp = self.inp2hid(x)\n",
    "        transformed_hid = self.hid2hid(y)\n",
    "        i_dt1, i_dt2, i_z, i_y = transformed_inp.chunk(4, 1)\n",
    "        h_dt1, h_dt2, h_y = transformed_hid.chunk(3, 1)\n",
    "\n",
    "        ms_dt_bar = self.dt * torch.sigmoid(i_dt1 + h_dt1)\n",
    "        ms_dt = self.dt * torch.sigmoid(i_dt2 + h_dt2)\n",
    "\n",
    "        z = (1. - ms_dt) * z + ms_dt * torch.tanh(i_y + h_y)\n",
    "        y = (1. - ms_dt_bar) * y + ms_dt_bar * torch.tanh(self.transform_z(z) + i_z)\n",
    "\n",
    "        return y, z\n",
    "\n",
    "# Define the LEM model\n",
    "class LEM(nn.Module):\n",
    "    def __init__(self, ninp, nhid, nout, dt=1.):\n",
    "        super(LEM, self).__init__()\n",
    "        self.nhid = nhid\n",
    "        self.cell = LEMCell(ninp, nhid, dt)\n",
    "        self.classifier = nn.Linear(nhid, nout)\n",
    "        self.init_weights()\n",
    "\n",
    "    def init_weights(self):\n",
    "        for name, param in self.named_parameters():\n",
    "            if 'classifier' in name and 'weight' in name:\n",
    "                nn.init.kaiming_normal_(param.data)\n",
    "\n",
    "    def forward(self, input):\n",
    "        y = input.data.new(input.size(1), self.nhid).zero_()\n",
    "        z = input.data.new(input.size(1), self.nhid).zero_()\n",
    "        for x in input:\n",
    "            y, z = self.cell(x, y, z)\n",
    "        out = self.classifier(y)\n",
    "        return out\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a982afa5",
   "metadata": {},
   "source": [
    "### PINN data importing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "79da65b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# importing data\n",
    "\n",
    "# Load the .mat file\n",
    "mat_data = scipy.io.loadmat('burg.mat')\n",
    "\n",
    "# Access the variables stored in the .mat file\n",
    "# The variable names in the .mat file become keys in the loaded dictionary\n",
    "x = mat_data['x']\n",
    "t = mat_data['t']\n",
    "u = mat_data['u1']\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bbac9f8e",
   "metadata": {},
   "source": [
    "### Exact Solution data importing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9967dbae",
   "metadata": {},
   "outputs": [],
   "source": [
    "# importing data\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import time\n",
    "import scipy.io\n",
    "\n",
    "# Load the .mat file\n",
    "mat_data = scipy.io.loadmat('burgers_shock.mat')\n",
    "\n",
    "# Access the variables stored in the .mat file\n",
    "# The variable names in the .mat file become keys in the loaded dictionary\n",
    "x = mat_data['x']\n",
    "t = mat_data['t']\n",
    "u_1 = mat_data['usol']\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "83a01b14",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(256, 100)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Set random seed for reproducibility\n",
    "#torch.manual_seed(42)\n",
    "\n",
    "# Toy problem data\n",
    "input_size = 256\n",
    "hidden_size = 32\n",
    "output_size = 256\n",
    "sequence_length = 79\n",
    "batch_size = 1\n",
    "num_epochs = 20000\n",
    "\n",
    "# Set random seed for reproducibility\n",
    "#torch.manual_seed(42)\n",
    "u[:, 0:100].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0496e4a4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test data shape (256,)\n",
      "input data shape (256, 79)\n",
      "Target data shape (256, 79)\n",
      "input tensor shape torch.Size([1, 79, 256])\n",
      "Target tensor shape torch.Size([1, 79, 256])\n"
     ]
    }
   ],
   "source": [
    "input_data = u[:,0:79]\n",
    "target_data = u[:,1:80]\n",
    "\n",
    "test_data = u[:,79]\n",
    "#test_target = u[:,80:100]\n",
    "\n",
    "print(\"test data shape\", test_data.shape)\n",
    "#print(\"test target shape\", test_target.shape)\n",
    "\n",
    "print(\"input data shape\",input_data.shape)\n",
    "print(\"Target data shape\",target_data.shape)\n",
    "\n",
    "# Convert data to tensors\n",
    "input_tensor = torch.tensor(input_data.T).view(batch_size, sequence_length, input_size).float()\n",
    "target_tensor = torch.tensor(target_data.T).view(batch_size, sequence_length, output_size).float()\n",
    "\n",
    "print(\"input tensor shape\",input_tensor.shape)\n",
    "print(\"Target tensor shape\",target_tensor.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "718d5b86",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Convert test data to tensors\n",
    "test_tensor = torch.tensor(test_data.T).view(batch_size, 1, input_size).float()\n",
    "#test_target_tensor = torch.tensor(test_target.T).view(batch_size, 20, output_size).float()\n",
    "target_tensor = torch.squeeze(target_tensor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "d733ab9a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 10/20000, Loss: 0.3883340060710907\n",
      "Epoch: 20/20000, Loss: 0.3492854237556458\n",
      "Epoch: 30/20000, Loss: 0.3117892742156982\n",
      "Epoch: 40/20000, Loss: 0.2760362327098846\n",
      "Epoch: 50/20000, Loss: 0.2424257993698120\n",
      "Epoch: 60/20000, Loss: 0.2119646221399307\n",
      "Epoch: 70/20000, Loss: 0.1848683953285217\n",
      "Epoch: 80/20000, Loss: 0.1605141758918762\n",
      "Epoch: 90/20000, Loss: 0.1395493745803833\n",
      "Epoch: 100/20000, Loss: 0.1214146092534065\n",
      "Epoch: 110/20000, Loss: 0.1060409545898438\n",
      "Epoch: 120/20000, Loss: 0.0930523723363876\n",
      "Epoch: 130/20000, Loss: 0.0819733664393425\n",
      "Epoch: 140/20000, Loss: 0.0724668055772781\n",
      "Epoch: 150/20000, Loss: 0.0643650814890862\n",
      "Epoch: 160/20000, Loss: 0.0575365535914898\n",
      "Epoch: 170/20000, Loss: 0.0518238022923470\n",
      "Epoch: 180/20000, Loss: 0.0470631383359432\n",
      "Epoch: 190/20000, Loss: 0.0431018471717834\n",
      "Epoch: 200/20000, Loss: 0.0398043431341648\n",
      "Epoch: 210/20000, Loss: 0.0370527319610119\n",
      "Epoch: 220/20000, Loss: 0.0347453020513058\n",
      "Epoch: 230/20000, Loss: 0.0327953919768333\n",
      "Epoch: 240/20000, Loss: 0.0311314370483160\n",
      "Epoch: 250/20000, Loss: 0.0296971071511507\n",
      "Epoch: 260/20000, Loss: 0.0284497048705816\n",
      "Epoch: 270/20000, Loss: 0.0273571126163006\n",
      "Epoch: 280/20000, Loss: 0.0263947565108538\n",
      "Epoch: 290/20000, Loss: 0.0255429930984974\n",
      "Epoch: 300/20000, Loss: 0.0247856453061104\n",
      "Epoch: 310/20000, Loss: 0.0241091419011354\n",
      "Epoch: 320/20000, Loss: 0.0235015433281660\n",
      "Epoch: 330/20000, Loss: 0.0229496359825134\n",
      "Epoch: 340/20000, Loss: 0.0223212894052267\n",
      "Epoch: 350/20000, Loss: 0.0215191077440977\n",
      "Epoch: 360/20000, Loss: 0.0208227261900902\n",
      "Epoch: 370/20000, Loss: 0.0201716255396605\n",
      "Epoch: 380/20000, Loss: 0.0195623878389597\n",
      "Epoch: 390/20000, Loss: 0.0188971199095249\n",
      "Epoch: 400/20000, Loss: 0.0182451866567135\n",
      "Epoch: 410/20000, Loss: 0.0176462866365910\n",
      "Epoch: 420/20000, Loss: 0.0170428548008204\n",
      "Epoch: 430/20000, Loss: 0.0164747759699821\n",
      "Epoch: 440/20000, Loss: 0.0159366969019175\n",
      "Epoch: 450/20000, Loss: 0.0154297593981028\n",
      "Epoch: 460/20000, Loss: 0.0149408895522356\n",
      "Epoch: 470/20000, Loss: 0.0144913904368877\n",
      "Epoch: 480/20000, Loss: 0.0140873854979873\n",
      "Epoch: 490/20000, Loss: 0.0137149924412370\n",
      "Epoch: 500/20000, Loss: 0.0133680999279022\n",
      "Epoch: 510/20000, Loss: 0.0130421752110124\n",
      "Epoch: 520/20000, Loss: 0.0127331651747227\n",
      "Epoch: 530/20000, Loss: 0.0124388858675957\n",
      "Epoch: 540/20000, Loss: 0.0121560432016850\n",
      "Epoch: 550/20000, Loss: 0.0118825538083911\n",
      "Epoch: 560/20000, Loss: 0.0116165559738874\n",
      "Epoch: 570/20000, Loss: 0.0113565316423774\n",
      "Epoch: 580/20000, Loss: 0.0111012533307076\n",
      "Epoch: 590/20000, Loss: 0.0108497701585293\n",
      "Epoch: 600/20000, Loss: 0.0106014162302017\n",
      "Epoch: 610/20000, Loss: 0.0103558618575335\n",
      "Epoch: 620/20000, Loss: 0.0101131582632661\n",
      "Epoch: 630/20000, Loss: 0.0098737236112356\n",
      "Epoch: 640/20000, Loss: 0.0096382005140185\n",
      "Epoch: 650/20000, Loss: 0.0094072390347719\n",
      "Epoch: 660/20000, Loss: 0.0091813458129764\n",
      "Epoch: 670/20000, Loss: 0.0089608272537589\n",
      "Epoch: 680/20000, Loss: 0.0087458211928606\n",
      "Epoch: 690/20000, Loss: 0.0085363499820232\n",
      "Epoch: 700/20000, Loss: 0.0083323558792472\n",
      "Epoch: 710/20000, Loss: 0.0081337448209524\n",
      "Epoch: 720/20000, Loss: 0.0079403938725591\n",
      "Epoch: 730/20000, Loss: 0.0077521679922938\n",
      "Epoch: 740/20000, Loss: 0.0075689260847867\n",
      "Epoch: 750/20000, Loss: 0.0073905210010707\n",
      "Epoch: 760/20000, Loss: 0.0072168051265180\n",
      "Epoch: 770/20000, Loss: 0.0070476341061294\n",
      "Epoch: 780/20000, Loss: 0.0068828659132123\n",
      "Epoch: 790/20000, Loss: 0.0067223659716547\n",
      "Epoch: 800/20000, Loss: 0.0065660048276186\n",
      "Epoch: 810/20000, Loss: 0.0064136618748307\n",
      "Epoch: 820/20000, Loss: 0.0062652262859046\n",
      "Epoch: 830/20000, Loss: 0.0061205904930830\n",
      "Epoch: 840/20000, Loss: 0.0059796511195600\n",
      "Epoch: 850/20000, Loss: 0.0058423173613846\n",
      "Epoch: 860/20000, Loss: 0.0057084946893156\n",
      "Epoch: 870/20000, Loss: 0.0055780964903533\n",
      "Epoch: 880/20000, Loss: 0.0054510384798050\n",
      "Epoch: 890/20000, Loss: 0.0053272396326065\n",
      "Epoch: 900/20000, Loss: 0.0052066189236939\n",
      "Epoch: 910/20000, Loss: 0.0050890995189548\n",
      "Epoch: 920/20000, Loss: 0.0049746055155993\n",
      "Epoch: 930/20000, Loss: 0.0048630633391440\n",
      "Epoch: 940/20000, Loss: 0.0047543994151056\n",
      "Epoch: 950/20000, Loss: 0.0046485434286296\n",
      "Epoch: 960/20000, Loss: 0.0045454259961843\n",
      "Epoch: 970/20000, Loss: 0.0044449763372540\n",
      "Epoch: 980/20000, Loss: 0.0043471283279359\n",
      "Epoch: 990/20000, Loss: 0.0042518130503595\n",
      "Epoch: 1000/20000, Loss: 0.0041589653119445\n",
      "Epoch: 1010/20000, Loss: 0.0040685180574656\n",
      "Epoch: 1020/20000, Loss: 0.0039804033003747\n",
      "Epoch: 1030/20000, Loss: 0.0038945539854467\n",
      "Epoch: 1040/20000, Loss: 0.0038108990993351\n",
      "Epoch: 1050/20000, Loss: 0.0037293622735888\n",
      "Epoch: 1060/20000, Loss: 0.0036498580593616\n",
      "Epoch: 1070/20000, Loss: 0.0035722765605897\n",
      "Epoch: 1080/20000, Loss: 0.0034964515361935\n",
      "Epoch: 1090/20000, Loss: 0.0034219818189740\n",
      "Epoch: 1100/20000, Loss: 0.0033442114945501\n",
      "Epoch: 1110/20000, Loss: 0.0031798665877432\n",
      "Epoch: 1120/20000, Loss: 0.0030659867916256\n",
      "Epoch: 1130/20000, Loss: 0.0029621615540236\n",
      "Epoch: 1140/20000, Loss: 0.0028403932228684\n",
      "Epoch: 1150/20000, Loss: 0.0027346108108759\n",
      "Epoch: 1160/20000, Loss: 0.0026412501465529\n",
      "Epoch: 1170/20000, Loss: 0.0025569295976311\n",
      "Epoch: 1180/20000, Loss: 0.0024793157353997\n",
      "Epoch: 1190/20000, Loss: 0.0024057324044406\n",
      "Epoch: 1200/20000, Loss: 0.0023355709854513\n",
      "Epoch: 1210/20000, Loss: 0.0022682324051857\n",
      "Epoch: 1220/20000, Loss: 0.0022034128196537\n",
      "Epoch: 1230/20000, Loss: 0.0021409150213003\n",
      "Epoch: 1240/20000, Loss: 0.0020806230604649\n",
      "Epoch: 1250/20000, Loss: 0.0020224624313414\n",
      "Epoch: 1260/20000, Loss: 0.0019663670100272\n",
      "Epoch: 1270/20000, Loss: 0.0019122657831758\n",
      "Epoch: 1280/20000, Loss: 0.0018600659677759\n",
      "Epoch: 1290/20000, Loss: 0.0018096140120178\n",
      "Epoch: 1300/20000, Loss: 0.0017605769680813\n",
      "Epoch: 1310/20000, Loss: 0.0017130059422925\n",
      "Epoch: 1320/20000, Loss: 0.0016661660047248\n",
      "Epoch: 1330/20000, Loss: 0.0016196611104533\n",
      "Epoch: 1340/20000, Loss: 0.0015751749742776\n",
      "Epoch: 1350/20000, Loss: 0.0015322443796322\n",
      "Epoch: 1360/20000, Loss: 0.0014907900476828\n",
      "Epoch: 1370/20000, Loss: 0.0014506480656564\n",
      "Epoch: 1380/20000, Loss: 0.0014117109822109\n",
      "Epoch: 1390/20000, Loss: 0.0013739157002419\n",
      "Epoch: 1400/20000, Loss: 0.0013372383546084\n",
      "Epoch: 1410/20000, Loss: 0.0013018526369706\n",
      "Epoch: 1420/20000, Loss: 0.0012675873003900\n",
      "Epoch: 1430/20000, Loss: 0.0012342967092991\n",
      "Epoch: 1440/20000, Loss: 0.0012016502441838\n",
      "Epoch: 1450/20000, Loss: 0.0011696687433869\n",
      "Epoch: 1460/20000, Loss: 0.0011362922377884\n",
      "Epoch: 1470/20000, Loss: 0.0011063109850511\n",
      "Epoch: 1480/20000, Loss: 0.0010771843371913\n",
      "Epoch: 1490/20000, Loss: 0.0010494246380404\n",
      "Epoch: 1500/20000, Loss: 0.0010225909063593\n",
      "Epoch: 1510/20000, Loss: 0.0009963107295334\n",
      "Epoch: 1520/20000, Loss: 0.0009713703766465\n",
      "Epoch: 1530/20000, Loss: 0.0009473803802393\n",
      "Epoch: 1540/20000, Loss: 0.0009247768321075\n",
      "Epoch: 1550/20000, Loss: 0.0009026889456436\n",
      "Epoch: 1560/20000, Loss: 0.0008814893080853\n",
      "Epoch: 1570/20000, Loss: 0.0008614104590379\n",
      "Epoch: 1580/20000, Loss: 0.0008421695092693\n",
      "Epoch: 1590/20000, Loss: 0.0008237492875196\n",
      "Epoch: 1600/20000, Loss: 0.0008060184190981\n",
      "Epoch: 1610/20000, Loss: 0.0007889227708802\n",
      "Epoch: 1620/20000, Loss: 0.0007723156013526\n",
      "Epoch: 1630/20000, Loss: 0.0007564714760520\n",
      "Epoch: 1640/20000, Loss: 0.0007412703125738\n",
      "Epoch: 1650/20000, Loss: 0.0007269606576301\n",
      "Epoch: 1660/20000, Loss: 0.0007124115363695\n",
      "Epoch: 1670/20000, Loss: 0.0006988153327256\n",
      "Epoch: 1680/20000, Loss: 0.0006855654646643\n",
      "Epoch: 1690/20000, Loss: 0.0006728105363436\n",
      "Epoch: 1700/20000, Loss: 0.0006604877999052\n",
      "Epoch: 1710/20000, Loss: 0.0006485854974017\n",
      "Epoch: 1720/20000, Loss: 0.0006381828570738\n",
      "Epoch: 1730/20000, Loss: 0.0006261165835895\n",
      "Epoch: 1740/20000, Loss: 0.0006152573623694\n",
      "Epoch: 1750/20000, Loss: 0.0006045257323422\n",
      "Epoch: 1760/20000, Loss: 0.0005943292635493\n",
      "Epoch: 1770/20000, Loss: 0.0005844240076840\n",
      "Epoch: 1780/20000, Loss: 0.0005748693365604\n",
      "Epoch: 1790/20000, Loss: 0.0005656122812070\n",
      "Epoch: 1800/20000, Loss: 0.0005566449253820\n",
      "Epoch: 1810/20000, Loss: 0.0005479505052790\n",
      "Epoch: 1820/20000, Loss: 0.0005395184271038\n",
      "Epoch: 1830/20000, Loss: 0.0005315685411915\n",
      "Epoch: 1840/20000, Loss: 0.0005234488635324\n",
      "Epoch: 1850/20000, Loss: 0.0005159170832485\n",
      "Epoch: 1860/20000, Loss: 0.0005083889118396\n",
      "Epoch: 1870/20000, Loss: 0.0005009461310692\n",
      "Epoch: 1880/20000, Loss: 0.0004937952617183\n",
      "Epoch: 1890/20000, Loss: 0.0004868788819294\n",
      "Epoch: 1900/20000, Loss: 0.0004801168397535\n",
      "Epoch: 1910/20000, Loss: 0.0004735251422971\n",
      "Epoch: 1920/20000, Loss: 0.0004670901107602\n",
      "Epoch: 1930/20000, Loss: 0.0004608030430973\n",
      "Epoch: 1940/20000, Loss: 0.0004546567215584\n",
      "Epoch: 1950/20000, Loss: 0.0004486445395742\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 1960/20000, Loss: 0.0004427622479852\n",
      "Epoch: 1970/20000, Loss: 0.0004371681425255\n",
      "Epoch: 1980/20000, Loss: 0.0004324385954533\n",
      "Epoch: 1990/20000, Loss: 0.0004262750153430\n",
      "Epoch: 2000/20000, Loss: 0.0004204456345178\n",
      "Epoch: 2010/20000, Loss: 0.0004152093606535\n",
      "Epoch: 2020/20000, Loss: 0.0004099020734429\n",
      "Epoch: 2030/20000, Loss: 0.0004047988040838\n",
      "Epoch: 2040/20000, Loss: 0.0003997650637757\n",
      "Epoch: 2050/20000, Loss: 0.0003948319063056\n",
      "Epoch: 2060/20000, Loss: 0.0003899903967977\n",
      "Epoch: 2070/20000, Loss: 0.0003852364316117\n",
      "Epoch: 2080/20000, Loss: 0.0003805686719716\n",
      "Epoch: 2090/20000, Loss: 0.0003759846731555\n",
      "Epoch: 2100/20000, Loss: 0.0003714827471413\n",
      "Epoch: 2110/20000, Loss: 0.0003670608566608\n",
      "Epoch: 2120/20000, Loss: 0.0003627503465395\n",
      "Epoch: 2130/20000, Loss: 0.0003610793210100\n",
      "Epoch: 2140/20000, Loss: 0.0003554178983904\n",
      "Epoch: 2150/20000, Loss: 0.0003502471372485\n",
      "Epoch: 2160/20000, Loss: 0.0003461833111942\n",
      "Epoch: 2170/20000, Loss: 0.0003421416622587\n",
      "Epoch: 2180/20000, Loss: 0.0003382052236702\n",
      "Epoch: 2190/20000, Loss: 0.0003343308053445\n",
      "Epoch: 2200/20000, Loss: 0.0003305330756120\n",
      "Epoch: 2210/20000, Loss: 0.0003267912543379\n",
      "Epoch: 2220/20000, Loss: 0.0003231056907680\n",
      "Epoch: 2230/20000, Loss: 0.0003194751334377\n",
      "Epoch: 2240/20000, Loss: 0.0003158983599860\n",
      "Epoch: 2250/20000, Loss: 0.0003123732167296\n",
      "Epoch: 2260/20000, Loss: 0.0003088993835263\n",
      "Epoch: 2270/20000, Loss: 0.0003055152192246\n",
      "Epoch: 2280/20000, Loss: 0.0003054045955651\n",
      "Epoch: 2290/20000, Loss: 0.0003000219585374\n",
      "Epoch: 2300/20000, Loss: 0.0002958715194836\n",
      "Epoch: 2310/20000, Loss: 0.0002922770800069\n",
      "Epoch: 2320/20000, Loss: 0.0002891573822126\n",
      "Epoch: 2330/20000, Loss: 0.0002859407104552\n",
      "Epoch: 2340/20000, Loss: 0.0002828455471899\n",
      "Epoch: 2350/20000, Loss: 0.0002797721535899\n",
      "Epoch: 2360/20000, Loss: 0.0002767456171568\n",
      "Epoch: 2370/20000, Loss: 0.0002737585164141\n",
      "Epoch: 2380/20000, Loss: 0.0002708086103667\n",
      "Epoch: 2390/20000, Loss: 0.0002678951132111\n",
      "Epoch: 2400/20000, Loss: 0.0002650168316904\n",
      "Epoch: 2410/20000, Loss: 0.0002621730673127\n",
      "Epoch: 2420/20000, Loss: 0.0002593641402200\n",
      "Epoch: 2430/20000, Loss: 0.0002566649927758\n",
      "Epoch: 2440/20000, Loss: 0.0002587224880699\n",
      "Epoch: 2450/20000, Loss: 0.0002514263615012\n",
      "Epoch: 2460/20000, Loss: 0.0002490326005500\n",
      "Epoch: 2470/20000, Loss: 0.0002458808012307\n",
      "Epoch: 2480/20000, Loss: 0.0002432313922327\n",
      "Epoch: 2490/20000, Loss: 0.0002406316634733\n",
      "Epoch: 2500/20000, Loss: 0.0002380576916039\n",
      "Epoch: 2510/20000, Loss: 0.0002355162723688\n",
      "Epoch: 2520/20000, Loss: 0.0002330088027520\n",
      "Epoch: 2530/20000, Loss: 0.0002305273956154\n",
      "Epoch: 2540/20000, Loss: 0.0002280727931065\n",
      "Epoch: 2550/20000, Loss: 0.0002256455190945\n",
      "Epoch: 2560/20000, Loss: 0.0002232452825410\n",
      "Epoch: 2570/20000, Loss: 0.0002208729274571\n",
      "Epoch: 2580/20000, Loss: 0.0002185287594330\n",
      "Epoch: 2590/20000, Loss: 0.0002162193413824\n",
      "Epoch: 2600/20000, Loss: 0.0002164090983570\n",
      "Epoch: 2610/20000, Loss: 0.0002164755132981\n",
      "Epoch: 2620/20000, Loss: 0.0002108483458869\n",
      "Epoch: 2630/20000, Loss: 0.0002074980584439\n",
      "Epoch: 2640/20000, Loss: 0.0002051516930806\n",
      "Epoch: 2650/20000, Loss: 0.0002030181640293\n",
      "Epoch: 2660/20000, Loss: 0.0002009187010117\n",
      "Epoch: 2670/20000, Loss: 0.0001988467265619\n",
      "Epoch: 2680/20000, Loss: 0.0001968028518604\n",
      "Epoch: 2690/20000, Loss: 0.0001947844139067\n",
      "Epoch: 2700/20000, Loss: 0.0001927909470396\n",
      "Epoch: 2710/20000, Loss: 0.0001908241538331\n",
      "Epoch: 2720/20000, Loss: 0.0001888824917842\n",
      "Epoch: 2730/20000, Loss: 0.0001869655970950\n",
      "Epoch: 2740/20000, Loss: 0.0001850729167927\n",
      "Epoch: 2750/20000, Loss: 0.0001832039997680\n",
      "Epoch: 2760/20000, Loss: 0.0001813583949115\n",
      "Epoch: 2770/20000, Loss: 0.0001795356511138\n",
      "Epoch: 2780/20000, Loss: 0.0001777352881618\n",
      "Epoch: 2790/20000, Loss: 0.0001759570295690\n",
      "Epoch: 2800/20000, Loss: 0.0001742003223626\n",
      "Epoch: 2810/20000, Loss: 0.0001724648609525\n",
      "Epoch: 2820/20000, Loss: 0.0001707542978693\n",
      "Epoch: 2830/20000, Loss: 0.0001710144715616\n",
      "Epoch: 2840/20000, Loss: 0.0001738432765706\n",
      "Epoch: 2850/20000, Loss: 0.0001677732652752\n",
      "Epoch: 2860/20000, Loss: 0.0001643774448894\n",
      "Epoch: 2870/20000, Loss: 0.0001625327131478\n",
      "Epoch: 2880/20000, Loss: 0.0001609775936231\n",
      "Epoch: 2890/20000, Loss: 0.0001593983324710\n",
      "Epoch: 2900/20000, Loss: 0.0001578321825946\n",
      "Epoch: 2910/20000, Loss: 0.0001562902471051\n",
      "Epoch: 2920/20000, Loss: 0.0001547690917505\n",
      "Epoch: 2930/20000, Loss: 0.0001532661117380\n",
      "Epoch: 2940/20000, Loss: 0.0001517796772532\n",
      "Epoch: 2950/20000, Loss: 0.0001503087696619\n",
      "Epoch: 2960/20000, Loss: 0.0001488527050242\n",
      "Epoch: 2970/20000, Loss: 0.0001474112941651\n",
      "Epoch: 2980/20000, Loss: 0.0001459840132156\n",
      "Epoch: 2990/20000, Loss: 0.0001445706002414\n",
      "Epoch: 3000/20000, Loss: 0.0001431707059965\n",
      "Epoch: 3010/20000, Loss: 0.0001417842577212\n",
      "Epoch: 3020/20000, Loss: 0.0001404112117598\n",
      "Epoch: 3030/20000, Loss: 0.0001390517136315\n",
      "Epoch: 3040/20000, Loss: 0.0001377061125822\n",
      "Epoch: 3050/20000, Loss: 0.0001363750780001\n",
      "Epoch: 3060/20000, Loss: 0.0001350594102405\n",
      "Epoch: 3070/20000, Loss: 0.0001337601279374\n",
      "Epoch: 3080/20000, Loss: 0.0001324971963186\n",
      "Epoch: 3090/20000, Loss: 0.0001366547221551\n",
      "Epoch: 3100/20000, Loss: 0.0001330695813522\n",
      "Epoch: 3110/20000, Loss: 0.0001299242576351\n",
      "Epoch: 3120/20000, Loss: 0.0001279109128518\n",
      "Epoch: 3130/20000, Loss: 0.0001264908933081\n",
      "Epoch: 3140/20000, Loss: 0.0001252593210666\n",
      "Epoch: 3150/20000, Loss: 0.0001240849960595\n",
      "Epoch: 3160/20000, Loss: 0.0001229365589097\n",
      "Epoch: 3170/20000, Loss: 0.0001218103789142\n",
      "Epoch: 3180/20000, Loss: 0.0001207065724884\n",
      "Epoch: 3190/20000, Loss: 0.0001196188241011\n",
      "Epoch: 3200/20000, Loss: 0.0001185447763419\n",
      "Epoch: 3210/20000, Loss: 0.0001174852586701\n",
      "Epoch: 3220/20000, Loss: 0.0001164393834188\n",
      "Epoch: 3230/20000, Loss: 0.0001154069104814\n",
      "Epoch: 3240/20000, Loss: 0.0001143876215792\n",
      "Epoch: 3250/20000, Loss: 0.0001133811310865\n",
      "Epoch: 3260/20000, Loss: 0.0001123872352764\n",
      "Epoch: 3270/20000, Loss: 0.0001114056940423\n",
      "Epoch: 3280/20000, Loss: 0.0001104361945181\n",
      "Epoch: 3290/20000, Loss: 0.0001094785839086\n",
      "Epoch: 3300/20000, Loss: 0.0001085326803150\n",
      "Epoch: 3310/20000, Loss: 0.0001075982654584\n",
      "Epoch: 3320/20000, Loss: 0.0001066776967491\n",
      "Epoch: 3330/20000, Loss: 0.0001067517659976\n",
      "Epoch: 3340/20000, Loss: 0.0001066253389581\n",
      "Epoch: 3350/20000, Loss: 0.0001045688040904\n",
      "Epoch: 3360/20000, Loss: 0.0001037282418110\n",
      "Epoch: 3370/20000, Loss: 0.0001025831516017\n",
      "Epoch: 3380/20000, Loss: 0.0001015193265630\n",
      "Epoch: 3390/20000, Loss: 0.0001005982121569\n",
      "Epoch: 3400/20000, Loss: 0.0000997414681478\n",
      "Epoch: 3410/20000, Loss: 0.0000989098625723\n",
      "Epoch: 3420/20000, Loss: 0.0000980921322480\n",
      "Epoch: 3430/20000, Loss: 0.0000972854904830\n",
      "Epoch: 3440/20000, Loss: 0.0000964893406490\n",
      "Epoch: 3450/20000, Loss: 0.0000957025404205\n",
      "Epoch: 3460/20000, Loss: 0.0000949244276853\n",
      "Epoch: 3470/20000, Loss: 0.0000941550897551\n",
      "Epoch: 3480/20000, Loss: 0.0000933943374548\n",
      "Epoch: 3490/20000, Loss: 0.0000926420252654\n",
      "Epoch: 3500/20000, Loss: 0.0000918979931157\n",
      "Epoch: 3510/20000, Loss: 0.0000911621827981\n",
      "Epoch: 3520/20000, Loss: 0.0000904344196897\n",
      "Epoch: 3530/20000, Loss: 0.0000897146310308\n",
      "Epoch: 3540/20000, Loss: 0.0000890026785783\n",
      "Epoch: 3550/20000, Loss: 0.0000882983877091\n",
      "Epoch: 3560/20000, Loss: 0.0000876017438713\n",
      "Epoch: 3570/20000, Loss: 0.0000869125869940\n",
      "Epoch: 3580/20000, Loss: 0.0000862307715579\n",
      "Epoch: 3590/20000, Loss: 0.0000855562902871\n",
      "Epoch: 3600/20000, Loss: 0.0000848983472679\n",
      "Epoch: 3610/20000, Loss: 0.0000895921402844\n",
      "Epoch: 3620/20000, Loss: 0.0000882999156602\n",
      "Epoch: 3630/20000, Loss: 0.0000831331053632\n",
      "Epoch: 3640/20000, Loss: 0.0000826392279123\n",
      "Epoch: 3650/20000, Loss: 0.0000820042841951\n",
      "Epoch: 3660/20000, Loss: 0.0000811275676824\n",
      "Epoch: 3670/20000, Loss: 0.0000804583251011\n",
      "Epoch: 3680/20000, Loss: 0.0000798507680884\n",
      "Epoch: 3690/20000, Loss: 0.0000792489227024\n",
      "Epoch: 3700/20000, Loss: 0.0000786520176916\n",
      "Epoch: 3710/20000, Loss: 0.0000780614209361\n",
      "Epoch: 3720/20000, Loss: 0.0000774770887801\n",
      "Epoch: 3730/20000, Loss: 0.0000768986938056\n",
      "Epoch: 3740/20000, Loss: 0.0000763260904932\n",
      "Epoch: 3750/20000, Loss: 0.0000757590387366\n",
      "Epoch: 3760/20000, Loss: 0.0000751975239837\n",
      "Epoch: 3770/20000, Loss: 0.0000746414516470\n",
      "Epoch: 3780/20000, Loss: 0.0000740907635191\n",
      "Epoch: 3790/20000, Loss: 0.0000735453795642\n",
      "Epoch: 3800/20000, Loss: 0.0000730051833671\n",
      "Epoch: 3810/20000, Loss: 0.0000724701239960\n",
      "Epoch: 3820/20000, Loss: 0.0000719401359675\n",
      "Epoch: 3830/20000, Loss: 0.0000714151319698\n",
      "Epoch: 3840/20000, Loss: 0.0000708950319677\n",
      "Epoch: 3850/20000, Loss: 0.0000703797850292\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 3860/20000, Loss: 0.0000698692965670\n",
      "Epoch: 3870/20000, Loss: 0.0000693635520292\n",
      "Epoch: 3880/20000, Loss: 0.0000688623840688\n",
      "Epoch: 3890/20000, Loss: 0.0000683665130055\n",
      "Epoch: 3900/20000, Loss: 0.0000679798831698\n",
      "Epoch: 3910/20000, Loss: 0.0000797752290964\n",
      "Epoch: 3920/20000, Loss: 0.0000671224843245\n",
      "Epoch: 3930/20000, Loss: 0.0000664447870804\n",
      "Epoch: 3940/20000, Loss: 0.0000659741272102\n",
      "Epoch: 3950/20000, Loss: 0.0000655134790577\n",
      "Epoch: 3960/20000, Loss: 0.0000650598958600\n",
      "Epoch: 3970/20000, Loss: 0.0000646028493065\n",
      "Epoch: 3980/20000, Loss: 0.0000641385122435\n",
      "Epoch: 3990/20000, Loss: 0.0000636796321487\n",
      "Epoch: 4000/20000, Loss: 0.0000632327501080\n",
      "Epoch: 4010/20000, Loss: 0.0000627890258329\n",
      "Epoch: 4020/20000, Loss: 0.0000623492887826\n",
      "Epoch: 4030/20000, Loss: 0.0000619131460553\n",
      "Epoch: 4040/20000, Loss: 0.0000614806849626\n",
      "Epoch: 4050/20000, Loss: 0.0000610517454334\n",
      "Epoch: 4060/20000, Loss: 0.0000606263056397\n",
      "Epoch: 4070/20000, Loss: 0.0000602045329288\n",
      "Epoch: 4080/20000, Loss: 0.0000597866783210\n",
      "Epoch: 4090/20000, Loss: 0.0000595216988586\n",
      "Epoch: 4100/20000, Loss: 0.0000627318368061\n",
      "Epoch: 4110/20000, Loss: 0.0000593158983975\n",
      "Epoch: 4120/20000, Loss: 0.0000583029577683\n",
      "Epoch: 4130/20000, Loss: 0.0000580133928452\n",
      "Epoch: 4140/20000, Loss: 0.0000573779470869\n",
      "Epoch: 4150/20000, Loss: 0.0000570169431739\n",
      "Epoch: 4160/20000, Loss: 0.0000565959962842\n",
      "Epoch: 4170/20000, Loss: 0.0000562114291824\n",
      "Epoch: 4180/20000, Loss: 0.0000558282154088\n",
      "Epoch: 4190/20000, Loss: 0.0000554474281671\n",
      "Epoch: 4200/20000, Loss: 0.0000550702716282\n",
      "Epoch: 4210/20000, Loss: 0.0000546962728549\n",
      "Epoch: 4220/20000, Loss: 0.0000543255082448\n",
      "Epoch: 4230/20000, Loss: 0.0000539576831216\n",
      "Epoch: 4240/20000, Loss: 0.0000535928884347\n",
      "Epoch: 4250/20000, Loss: 0.0000532329904672\n",
      "Epoch: 4260/20000, Loss: 0.0000530898942088\n",
      "Epoch: 4270/20000, Loss: 0.0000631044822512\n",
      "Epoch: 4280/20000, Loss: 0.0000529657190782\n",
      "Epoch: 4290/20000, Loss: 0.0000518337001267\n",
      "Epoch: 4300/20000, Loss: 0.0000515339743288\n",
      "Epoch: 4310/20000, Loss: 0.0000512280421390\n",
      "Epoch: 4320/20000, Loss: 0.0000508564735355\n",
      "Epoch: 4330/20000, Loss: 0.0000504723720951\n",
      "Epoch: 4340/20000, Loss: 0.0000501301983604\n",
      "Epoch: 4350/20000, Loss: 0.0000497987384733\n",
      "Epoch: 4360/20000, Loss: 0.0000494662454003\n",
      "Epoch: 4370/20000, Loss: 0.0000491388382216\n",
      "Epoch: 4380/20000, Loss: 0.0000488137338834\n",
      "Epoch: 4390/20000, Loss: 0.0000484911142848\n",
      "Epoch: 4400/20000, Loss: 0.0000481710594613\n",
      "Epoch: 4410/20000, Loss: 0.0000478534529975\n",
      "Epoch: 4420/20000, Loss: 0.0000475382294098\n",
      "Epoch: 4430/20000, Loss: 0.0000472253304906\n",
      "Epoch: 4440/20000, Loss: 0.0000469147489639\n",
      "Epoch: 4450/20000, Loss: 0.0000466064266220\n",
      "Epoch: 4460/20000, Loss: 0.0000463005671918\n",
      "Epoch: 4470/20000, Loss: 0.0000460135379399\n",
      "Epoch: 4480/20000, Loss: 0.0000489990488859\n",
      "Epoch: 4490/20000, Loss: 0.0000506467586092\n",
      "Epoch: 4500/20000, Loss: 0.0000460256997030\n",
      "Epoch: 4510/20000, Loss: 0.0000450798979728\n",
      "Epoch: 4520/20000, Loss: 0.0000445982223027\n",
      "Epoch: 4530/20000, Loss: 0.0000442556811322\n",
      "Epoch: 4540/20000, Loss: 0.0000439680770796\n",
      "Epoch: 4550/20000, Loss: 0.0000436913833255\n",
      "Epoch: 4560/20000, Loss: 0.0000434063767898\n",
      "Epoch: 4570/20000, Loss: 0.0000431230764661\n",
      "Epoch: 4580/20000, Loss: 0.0000428472376370\n",
      "Epoch: 4590/20000, Loss: 0.0000425724465458\n",
      "Epoch: 4600/20000, Loss: 0.0000423004785262\n",
      "Epoch: 4610/20000, Loss: 0.0000420304859290\n",
      "Epoch: 4620/20000, Loss: 0.0000417626542912\n",
      "Epoch: 4630/20000, Loss: 0.0000414969144913\n",
      "Epoch: 4640/20000, Loss: 0.0000412332301494\n",
      "Epoch: 4650/20000, Loss: 0.0000409715394198\n",
      "Epoch: 4660/20000, Loss: 0.0000407118532166\n",
      "Epoch: 4670/20000, Loss: 0.0000404541315220\n",
      "Epoch: 4680/20000, Loss: 0.0000401983452321\n",
      "Epoch: 4690/20000, Loss: 0.0000399445016228\n",
      "Epoch: 4700/20000, Loss: 0.0000396929499402\n",
      "Epoch: 4710/20000, Loss: 0.0000395108218072\n",
      "Epoch: 4720/20000, Loss: 0.0000537939922651\n",
      "Epoch: 4730/20000, Loss: 0.0000390156601497\n",
      "Epoch: 4740/20000, Loss: 0.0000387264008168\n",
      "Epoch: 4750/20000, Loss: 0.0000385377388739\n",
      "Epoch: 4760/20000, Loss: 0.0000383012447855\n",
      "Epoch: 4770/20000, Loss: 0.0000380334677175\n",
      "Epoch: 4780/20000, Loss: 0.0000377783908334\n",
      "Epoch: 4790/20000, Loss: 0.0000375384588551\n",
      "Epoch: 4800/20000, Loss: 0.0000373065195163\n",
      "Epoch: 4810/20000, Loss: 0.0000370767593267\n",
      "Epoch: 4820/20000, Loss: 0.0000368472428818\n",
      "Epoch: 4830/20000, Loss: 0.0000366196691175\n",
      "Epoch: 4840/20000, Loss: 0.0000363942453987\n",
      "Epoch: 4850/20000, Loss: 0.0000361702950613\n",
      "Epoch: 4860/20000, Loss: 0.0000359480181942\n",
      "Epoch: 4870/20000, Loss: 0.0000357273129339\n",
      "Epoch: 4880/20000, Loss: 0.0000355081610905\n",
      "Epoch: 4890/20000, Loss: 0.0000352905844920\n",
      "Epoch: 4900/20000, Loss: 0.0000350745176547\n",
      "Epoch: 4910/20000, Loss: 0.0000348599605786\n",
      "Epoch: 4920/20000, Loss: 0.0000346469132637\n",
      "Epoch: 4930/20000, Loss: 0.0000344353538821\n",
      "Epoch: 4940/20000, Loss: 0.0000342252642440\n",
      "Epoch: 4950/20000, Loss: 0.0000340166152455\n",
      "Epoch: 4960/20000, Loss: 0.0000338095451298\n",
      "Epoch: 4970/20000, Loss: 0.0000336196244461\n",
      "Epoch: 4980/20000, Loss: 0.0000374068440578\n",
      "Epoch: 4990/20000, Loss: 0.0000412180634157\n",
      "Epoch: 5000/20000, Loss: 0.0000354196527041\n",
      "Epoch: 5010/20000, Loss: 0.0000337736164511\n",
      "Epoch: 5020/20000, Loss: 0.0000329692447849\n",
      "Epoch: 5030/20000, Loss: 0.0000325464170601\n",
      "Epoch: 5040/20000, Loss: 0.0000322722007695\n",
      "Epoch: 5050/20000, Loss: 0.0000320484577969\n",
      "Epoch: 5060/20000, Loss: 0.0000318441889249\n",
      "Epoch: 5070/20000, Loss: 0.0000316503355862\n",
      "Epoch: 5080/20000, Loss: 0.0000314611679642\n",
      "Epoch: 5090/20000, Loss: 0.0000312726369884\n",
      "Epoch: 5100/20000, Loss: 0.0000310853611154\n",
      "Epoch: 5110/20000, Loss: 0.0000308995804517\n",
      "Epoch: 5120/20000, Loss: 0.0000307150185108\n",
      "Epoch: 5130/20000, Loss: 0.0000305316971208\n",
      "Epoch: 5140/20000, Loss: 0.0000303496271954\n",
      "Epoch: 5150/20000, Loss: 0.0000301687559841\n",
      "Epoch: 5160/20000, Loss: 0.0000299891144095\n",
      "Epoch: 5170/20000, Loss: 0.0000298106861010\n",
      "Epoch: 5180/20000, Loss: 0.0000296334346785\n",
      "Epoch: 5190/20000, Loss: 0.0000294573965220\n",
      "Epoch: 5200/20000, Loss: 0.0000292825316137\n",
      "Epoch: 5210/20000, Loss: 0.0000291088581434\n",
      "Epoch: 5220/20000, Loss: 0.0000289366853394\n",
      "Epoch: 5230/20000, Loss: 0.0000288006340270\n",
      "Epoch: 5240/20000, Loss: 0.0000354246512870\n",
      "Epoch: 5250/20000, Loss: 0.0000350731570506\n",
      "Epoch: 5260/20000, Loss: 0.0000304555978801\n",
      "Epoch: 5270/20000, Loss: 0.0000288454593829\n",
      "Epoch: 5280/20000, Loss: 0.0000281812372123\n",
      "Epoch: 5290/20000, Loss: 0.0000278389088635\n",
      "Epoch: 5300/20000, Loss: 0.0000276237678918\n",
      "Epoch: 5310/20000, Loss: 0.0000274592566711\n",
      "Epoch: 5320/20000, Loss: 0.0000273021832982\n",
      "Epoch: 5330/20000, Loss: 0.0000271396620519\n",
      "Epoch: 5340/20000, Loss: 0.0000269809806923\n",
      "Epoch: 5350/20000, Loss: 0.0000268240855803\n",
      "Epoch: 5360/20000, Loss: 0.0000266681799985\n",
      "Epoch: 5370/20000, Loss: 0.0000265133858193\n",
      "Epoch: 5380/20000, Loss: 0.0000263596793957\n",
      "Epoch: 5390/20000, Loss: 0.0000262070134340\n",
      "Epoch: 5400/20000, Loss: 0.0000260553697444\n",
      "Epoch: 5410/20000, Loss: 0.0000259047337750\n",
      "Epoch: 5420/20000, Loss: 0.0000257551182585\n",
      "Epoch: 5430/20000, Loss: 0.0000256065013673\n",
      "Epoch: 5440/20000, Loss: 0.0000254588558164\n",
      "Epoch: 5450/20000, Loss: 0.0000253122125287\n",
      "Epoch: 5460/20000, Loss: 0.0000251665878750\n",
      "Epoch: 5470/20000, Loss: 0.0000250267366937\n",
      "Epoch: 5480/20000, Loss: 0.0000258137042692\n",
      "Epoch: 5490/20000, Loss: 0.0000256955663644\n",
      "Epoch: 5500/20000, Loss: 0.0000265997987299\n",
      "Epoch: 5510/20000, Loss: 0.0000252028330578\n",
      "Epoch: 5520/20000, Loss: 0.0000245900009759\n",
      "Epoch: 5530/20000, Loss: 0.0000243037120526\n",
      "Epoch: 5540/20000, Loss: 0.0000241094894591\n",
      "Epoch: 5550/20000, Loss: 0.0000239418568526\n",
      "Epoch: 5560/20000, Loss: 0.0000237893382291\n",
      "Epoch: 5570/20000, Loss: 0.0000236512514675\n",
      "Epoch: 5580/20000, Loss: 0.0000235186944337\n",
      "Epoch: 5590/20000, Loss: 0.0000233853206737\n",
      "Epoch: 5600/20000, Loss: 0.0000232536203839\n",
      "Epoch: 5610/20000, Loss: 0.0000231226786127\n",
      "Epoch: 5620/20000, Loss: 0.0000229927209148\n",
      "Epoch: 5630/20000, Loss: 0.0000228635799431\n",
      "Epoch: 5640/20000, Loss: 0.0000227352775255\n",
      "Epoch: 5650/20000, Loss: 0.0000226077863772\n",
      "Epoch: 5660/20000, Loss: 0.0000224811519729\n",
      "Epoch: 5670/20000, Loss: 0.0000223552979151\n",
      "Epoch: 5680/20000, Loss: 0.0000222302660404\n",
      "Epoch: 5690/20000, Loss: 0.0000221060290642\n",
      "Epoch: 5700/20000, Loss: 0.0000219825615204\n",
      "Epoch: 5710/20000, Loss: 0.0000218599852815\n",
      "Epoch: 5720/20000, Loss: 0.0000217461438297\n",
      "Epoch: 5730/20000, Loss: 0.0000232024485740\n",
      "Epoch: 5740/20000, Loss: 0.0000218026034418\n",
      "Epoch: 5750/20000, Loss: 0.0000217734341277\n",
      "Epoch: 5760/20000, Loss: 0.0000214582851186\n",
      "Epoch: 5770/20000, Loss: 0.0000212408067455\n",
      "Epoch: 5780/20000, Loss: 0.0000210953912756\n",
      "Epoch: 5790/20000, Loss: 0.0000209649278986\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 5800/20000, Loss: 0.0000208324527193\n",
      "Epoch: 5810/20000, Loss: 0.0000207028442674\n",
      "Epoch: 5820/20000, Loss: 0.0000205852757063\n",
      "Epoch: 5830/20000, Loss: 0.0000204734224099\n",
      "Epoch: 5840/20000, Loss: 0.0000203605886782\n",
      "Epoch: 5850/20000, Loss: 0.0000202493592951\n",
      "Epoch: 5860/20000, Loss: 0.0000201386410481\n",
      "Epoch: 5870/20000, Loss: 0.0000200287249754\n",
      "Epoch: 5880/20000, Loss: 0.0000199194801098\n",
      "Epoch: 5890/20000, Loss: 0.0000198109028133\n",
      "Epoch: 5900/20000, Loss: 0.0000197030076379\n",
      "Epoch: 5910/20000, Loss: 0.0000195957691176\n",
      "Epoch: 5920/20000, Loss: 0.0000194891817955\n",
      "Epoch: 5930/20000, Loss: 0.0000193832474906\n",
      "Epoch: 5940/20000, Loss: 0.0000192779425561\n",
      "Epoch: 5950/20000, Loss: 0.0000191733051906\n",
      "Epoch: 5960/20000, Loss: 0.0000190693972399\n",
      "Epoch: 5970/20000, Loss: 0.0000189809907170\n",
      "Epoch: 5980/20000, Loss: 0.0000228392855206\n",
      "Epoch: 5990/20000, Loss: 0.0000264718855760\n",
      "Epoch: 6000/20000, Loss: 0.0000209455611184\n",
      "Epoch: 6010/20000, Loss: 0.0000195676657313\n",
      "Epoch: 6020/20000, Loss: 0.0000188665198948\n",
      "Epoch: 6030/20000, Loss: 0.0000185214594239\n",
      "Epoch: 6040/20000, Loss: 0.0000183333686437\n",
      "Epoch: 6050/20000, Loss: 0.0000182017338375\n",
      "Epoch: 6060/20000, Loss: 0.0000180916722456\n",
      "Epoch: 6070/20000, Loss: 0.0000179921680683\n",
      "Epoch: 6080/20000, Loss: 0.0000178968275577\n",
      "Epoch: 6090/20000, Loss: 0.0000178014615813\n",
      "Epoch: 6100/20000, Loss: 0.0000177065885509\n",
      "Epoch: 6110/20000, Loss: 0.0000176125795406\n",
      "Epoch: 6120/20000, Loss: 0.0000175190780283\n",
      "Epoch: 6130/20000, Loss: 0.0000174261658685\n",
      "Epoch: 6140/20000, Loss: 0.0000173337994056\n",
      "Epoch: 6150/20000, Loss: 0.0000172419986484\n",
      "Epoch: 6160/20000, Loss: 0.0000171507508639\n",
      "Epoch: 6170/20000, Loss: 0.0000170600233105\n",
      "Epoch: 6180/20000, Loss: 0.0000169698541868\n",
      "Epoch: 6190/20000, Loss: 0.0000168802107510\n",
      "Epoch: 6200/20000, Loss: 0.0000167911020981\n",
      "Epoch: 6210/20000, Loss: 0.0000167025173141\n",
      "Epoch: 6220/20000, Loss: 0.0000166145036928\n",
      "Epoch: 6230/20000, Loss: 0.0000165300625667\n",
      "Epoch: 6240/20000, Loss: 0.0000171158881130\n",
      "Epoch: 6250/20000, Loss: 0.0000205166361411\n",
      "Epoch: 6260/20000, Loss: 0.0000193776395463\n",
      "Epoch: 6270/20000, Loss: 0.0000170191160578\n",
      "Epoch: 6280/20000, Loss: 0.0000162890737556\n",
      "Epoch: 6290/20000, Loss: 0.0000160754152603\n",
      "Epoch: 6300/20000, Loss: 0.0000159688952408\n",
      "Epoch: 6310/20000, Loss: 0.0000158809780260\n",
      "Epoch: 6320/20000, Loss: 0.0000157950635185\n",
      "Epoch: 6330/20000, Loss: 0.0000157087324624\n",
      "Epoch: 6340/20000, Loss: 0.0000156246878760\n",
      "Epoch: 6350/20000, Loss: 0.0000155439465743\n",
      "Epoch: 6360/20000, Loss: 0.0000154638219101\n",
      "Epoch: 6370/20000, Loss: 0.0000153840210260\n",
      "Epoch: 6380/20000, Loss: 0.0000153048567881\n",
      "Epoch: 6390/20000, Loss: 0.0000152261427502\n",
      "Epoch: 6400/20000, Loss: 0.0000151478998305\n",
      "Epoch: 6410/20000, Loss: 0.0000150701271195\n",
      "Epoch: 6420/20000, Loss: 0.0000149928227984\n",
      "Epoch: 6430/20000, Loss: 0.0000149159559442\n",
      "Epoch: 6440/20000, Loss: 0.0000148395656652\n",
      "Epoch: 6450/20000, Loss: 0.0000147636174006\n",
      "Epoch: 6460/20000, Loss: 0.0000146881120600\n",
      "Epoch: 6470/20000, Loss: 0.0000146130478242\n",
      "Epoch: 6480/20000, Loss: 0.0000145384556163\n",
      "Epoch: 6490/20000, Loss: 0.0000144662626553\n",
      "Epoch: 6500/20000, Loss: 0.0000147698829096\n",
      "Epoch: 6510/20000, Loss: 0.0000285807273031\n",
      "Epoch: 6520/20000, Loss: 0.0000192862426047\n",
      "Epoch: 6530/20000, Loss: 0.0000159464761964\n",
      "Epoch: 6540/20000, Loss: 0.0000147459013533\n",
      "Epoch: 6550/20000, Loss: 0.0000142713688547\n",
      "Epoch: 6560/20000, Loss: 0.0000140600513987\n",
      "Epoch: 6570/20000, Loss: 0.0000139362045957\n",
      "Epoch: 6580/20000, Loss: 0.0000138451669045\n",
      "Epoch: 6590/20000, Loss: 0.0000137707538670\n",
      "Epoch: 6600/20000, Loss: 0.0000137027409437\n",
      "Epoch: 6610/20000, Loss: 0.0000136339394885\n",
      "Epoch: 6620/20000, Loss: 0.0000135655709528\n",
      "Epoch: 6630/20000, Loss: 0.0000134980355142\n",
      "Epoch: 6640/20000, Loss: 0.0000134307883854\n",
      "Epoch: 6650/20000, Loss: 0.0000133639841806\n",
      "Epoch: 6660/20000, Loss: 0.0000132975810629\n",
      "Epoch: 6670/20000, Loss: 0.0000132315472001\n",
      "Epoch: 6680/20000, Loss: 0.0000131659144245\n",
      "Epoch: 6690/20000, Loss: 0.0000131006318043\n",
      "Epoch: 6700/20000, Loss: 0.0000130357411763\n",
      "Epoch: 6710/20000, Loss: 0.0000129712143462\n",
      "Epoch: 6720/20000, Loss: 0.0000129070504045\n",
      "Epoch: 6730/20000, Loss: 0.0000128432584461\n",
      "Epoch: 6740/20000, Loss: 0.0000127798648464\n",
      "Epoch: 6750/20000, Loss: 0.0000127218545458\n",
      "Epoch: 6760/20000, Loss: 0.0000138804098242\n",
      "Epoch: 6770/20000, Loss: 0.0000127071862153\n",
      "Epoch: 6780/20000, Loss: 0.0000130551461552\n",
      "Epoch: 6790/20000, Loss: 0.0000125120686789\n",
      "Epoch: 6800/20000, Loss: 0.0000124420448628\n",
      "Epoch: 6810/20000, Loss: 0.0000123848039948\n",
      "Epoch: 6820/20000, Loss: 0.0000123136151160\n",
      "Epoch: 6830/20000, Loss: 0.0000122490373542\n",
      "Epoch: 6840/20000, Loss: 0.0000121907141875\n",
      "Epoch: 6850/20000, Loss: 0.0000121328585010\n",
      "Epoch: 6860/20000, Loss: 0.0000120730874187\n",
      "Epoch: 6870/20000, Loss: 0.0000120137556223\n",
      "Epoch: 6880/20000, Loss: 0.0000119559108498\n",
      "Epoch: 6890/20000, Loss: 0.0000118982070489\n",
      "Epoch: 6900/20000, Loss: 0.0000118409470815\n",
      "Epoch: 6910/20000, Loss: 0.0000117839654195\n",
      "Epoch: 6920/20000, Loss: 0.0000117273348224\n",
      "Epoch: 6930/20000, Loss: 0.0000116709979920\n",
      "Epoch: 6940/20000, Loss: 0.0000116149776659\n",
      "Epoch: 6950/20000, Loss: 0.0000115592492875\n",
      "Epoch: 6960/20000, Loss: 0.0000115038283184\n",
      "Epoch: 6970/20000, Loss: 0.0000114486929306\n",
      "Epoch: 6980/20000, Loss: 0.0000113938485811\n",
      "Epoch: 6990/20000, Loss: 0.0000113392889034\n",
      "Epoch: 7000/20000, Loss: 0.0000112850193545\n",
      "Epoch: 7010/20000, Loss: 0.0000112315001388\n",
      "Epoch: 7020/20000, Loss: 0.0000112692814582\n",
      "Epoch: 7030/20000, Loss: 0.0000306833717332\n",
      "Epoch: 7040/20000, Loss: 0.0000111228328024\n",
      "Epoch: 7050/20000, Loss: 0.0000111884110083\n",
      "Epoch: 7060/20000, Loss: 0.0000112749976324\n",
      "Epoch: 7070/20000, Loss: 0.0000111320068754\n",
      "Epoch: 7080/20000, Loss: 0.0000109719730972\n",
      "Epoch: 7090/20000, Loss: 0.0000108648582682\n",
      "Epoch: 7100/20000, Loss: 0.0000107914893306\n",
      "Epoch: 7110/20000, Loss: 0.0000107339055830\n",
      "Epoch: 7120/20000, Loss: 0.0000106828856588\n",
      "Epoch: 7130/20000, Loss: 0.0000106333654912\n",
      "Epoch: 7140/20000, Loss: 0.0000105833287307\n",
      "Epoch: 7150/20000, Loss: 0.0000105337476271\n",
      "Epoch: 7160/20000, Loss: 0.0000104846349132\n",
      "Epoch: 7170/20000, Loss: 0.0000104357359305\n",
      "Epoch: 7180/20000, Loss: 0.0000103871125248\n",
      "Epoch: 7190/20000, Loss: 0.0000103387455965\n",
      "Epoch: 7200/20000, Loss: 0.0000102906342363\n",
      "Epoch: 7210/20000, Loss: 0.0000102427593447\n",
      "Epoch: 7220/20000, Loss: 0.0000101951281977\n",
      "Epoch: 7230/20000, Loss: 0.0000101477435237\n",
      "Epoch: 7240/20000, Loss: 0.0000101005853139\n",
      "Epoch: 7250/20000, Loss: 0.0000100536572063\n",
      "Epoch: 7260/20000, Loss: 0.0000100069655673\n",
      "Epoch: 7270/20000, Loss: 0.0000099605331343\n",
      "Epoch: 7280/20000, Loss: 0.0000099170174508\n",
      "Epoch: 7290/20000, Loss: 0.0000103341162685\n",
      "Epoch: 7300/20000, Loss: 0.0000220416641241\n",
      "Epoch: 7310/20000, Loss: 0.0000145488984344\n",
      "Epoch: 7320/20000, Loss: 0.0000113822343337\n",
      "Epoch: 7330/20000, Loss: 0.0000103040374597\n",
      "Epoch: 7340/20000, Loss: 0.0000098715363492\n",
      "Epoch: 7350/20000, Loss: 0.0000096837457022\n",
      "Epoch: 7360/20000, Loss: 0.0000095869181678\n",
      "Epoch: 7370/20000, Loss: 0.0000095318027888\n",
      "Epoch: 7380/20000, Loss: 0.0000094901688499\n",
      "Epoch: 7390/20000, Loss: 0.0000094461520348\n",
      "Epoch: 7400/20000, Loss: 0.0000094018896561\n",
      "Epoch: 7410/20000, Loss: 0.0000093592589110\n",
      "Epoch: 7420/20000, Loss: 0.0000093164908321\n",
      "Epoch: 7430/20000, Loss: 0.0000092741174740\n",
      "Epoch: 7440/20000, Loss: 0.0000092319296527\n",
      "Epoch: 7450/20000, Loss: 0.0000091899419203\n",
      "Epoch: 7460/20000, Loss: 0.0000091481506388\n",
      "Epoch: 7470/20000, Loss: 0.0000091065439847\n",
      "Epoch: 7480/20000, Loss: 0.0000090651265054\n",
      "Epoch: 7490/20000, Loss: 0.0000090238872872\n",
      "Epoch: 7500/20000, Loss: 0.0000089828336058\n",
      "Epoch: 7510/20000, Loss: 0.0000089419618234\n",
      "Epoch: 7520/20000, Loss: 0.0000089014174591\n",
      "Epoch: 7530/20000, Loss: 0.0000088746255642\n",
      "Epoch: 7540/20000, Loss: 0.0000118633042803\n",
      "Epoch: 7550/20000, Loss: 0.0000131523684104\n",
      "Epoch: 7560/20000, Loss: 0.0000092360605777\n",
      "Epoch: 7570/20000, Loss: 0.0000089263994596\n",
      "Epoch: 7580/20000, Loss: 0.0000087600692495\n",
      "Epoch: 7590/20000, Loss: 0.0000086631725935\n",
      "Epoch: 7600/20000, Loss: 0.0000086067029770\n",
      "Epoch: 7610/20000, Loss: 0.0000085724777819\n",
      "Epoch: 7620/20000, Loss: 0.0000085357632997\n",
      "Epoch: 7630/20000, Loss: 0.0000084930579760\n",
      "Epoch: 7640/20000, Loss: 0.0000084531320681\n",
      "Epoch: 7650/20000, Loss: 0.0000084156372395\n",
      "Epoch: 7660/20000, Loss: 0.0000083776230895\n",
      "Epoch: 7670/20000, Loss: 0.0000083401873781\n",
      "Epoch: 7680/20000, Loss: 0.0000083028562585\n",
      "Epoch: 7690/20000, Loss: 0.0000082656906670\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 7700/20000, Loss: 0.0000082287097030\n",
      "Epoch: 7710/20000, Loss: 0.0000081918760770\n",
      "Epoch: 7720/20000, Loss: 0.0000081552016127\n",
      "Epoch: 7730/20000, Loss: 0.0000081186790339\n",
      "Epoch: 7740/20000, Loss: 0.0000080823119788\n",
      "Epoch: 7750/20000, Loss: 0.0000080460931713\n",
      "Epoch: 7760/20000, Loss: 0.0000080100271589\n",
      "Epoch: 7770/20000, Loss: 0.0000079741503214\n",
      "Epoch: 7780/20000, Loss: 0.0000079437668319\n",
      "Epoch: 7790/20000, Loss: 0.0000094104225354\n",
      "Epoch: 7800/20000, Loss: 0.0000083062859630\n",
      "Epoch: 7810/20000, Loss: 0.0000078762122939\n",
      "Epoch: 7820/20000, Loss: 0.0000080778627307\n",
      "Epoch: 7830/20000, Loss: 0.0000080353702288\n",
      "Epoch: 7840/20000, Loss: 0.0000079027431639\n",
      "Epoch: 7850/20000, Loss: 0.0000077747990872\n",
      "Epoch: 7860/20000, Loss: 0.0000077034183050\n",
      "Epoch: 7870/20000, Loss: 0.0000076536380220\n",
      "Epoch: 7880/20000, Loss: 0.0000076151409303\n",
      "Epoch: 7890/20000, Loss: 0.0000075811667557\n",
      "Epoch: 7900/20000, Loss: 0.0000075476577877\n",
      "Epoch: 7910/20000, Loss: 0.0000075137609201\n",
      "Epoch: 7920/20000, Loss: 0.0000074803374446\n",
      "Epoch: 7930/20000, Loss: 0.0000074470667641\n",
      "Epoch: 7940/20000, Loss: 0.0000074139406934\n",
      "Epoch: 7950/20000, Loss: 0.0000073809419519\n",
      "Epoch: 7960/20000, Loss: 0.0000073480732681\n",
      "Epoch: 7970/20000, Loss: 0.0000073153146332\n",
      "Epoch: 7980/20000, Loss: 0.0000072826969699\n",
      "Epoch: 7990/20000, Loss: 0.0000072501916293\n",
      "Epoch: 8000/20000, Loss: 0.0000072178008850\n",
      "Epoch: 8010/20000, Loss: 0.0000071855347414\n",
      "Epoch: 8020/20000, Loss: 0.0000071533772825\n",
      "Epoch: 8030/20000, Loss: 0.0000071213257797\n",
      "Epoch: 8040/20000, Loss: 0.0000070894807322\n",
      "Epoch: 8050/20000, Loss: 0.0000070700584729\n",
      "Epoch: 8060/20000, Loss: 0.0000114596114145\n",
      "Epoch: 8070/20000, Loss: 0.0000165115925483\n",
      "Epoch: 8080/20000, Loss: 0.0000103606716948\n",
      "Epoch: 8090/20000, Loss: 0.0000081534208221\n",
      "Epoch: 8100/20000, Loss: 0.0000072750131039\n",
      "Epoch: 8110/20000, Loss: 0.0000069673392318\n",
      "Epoch: 8120/20000, Loss: 0.0000068885901783\n",
      "Epoch: 8130/20000, Loss: 0.0000068424224082\n",
      "Epoch: 8140/20000, Loss: 0.0000068083591032\n",
      "Epoch: 8150/20000, Loss: 0.0000067749651862\n",
      "Epoch: 8160/20000, Loss: 0.0000067424889494\n",
      "Epoch: 8170/20000, Loss: 0.0000067118044171\n",
      "Epoch: 8180/20000, Loss: 0.0000066819161475\n",
      "Epoch: 8190/20000, Loss: 0.0000066519219217\n",
      "Epoch: 8200/20000, Loss: 0.0000066221564339\n",
      "Epoch: 8210/20000, Loss: 0.0000065924841692\n",
      "Epoch: 8220/20000, Loss: 0.0000065629305936\n",
      "Epoch: 8230/20000, Loss: 0.0000065334793362\n",
      "Epoch: 8240/20000, Loss: 0.0000065041226662\n",
      "Epoch: 8250/20000, Loss: 0.0000064748683144\n",
      "Epoch: 8260/20000, Loss: 0.0000064457085500\n",
      "Epoch: 8270/20000, Loss: 0.0000064166415541\n",
      "Epoch: 8280/20000, Loss: 0.0000063876659624\n",
      "Epoch: 8290/20000, Loss: 0.0000063587913246\n",
      "Epoch: 8300/20000, Loss: 0.0000063300012698\n",
      "Epoch: 8310/20000, Loss: 0.0000063013080762\n",
      "Epoch: 8320/20000, Loss: 0.0000062728458943\n",
      "Epoch: 8330/20000, Loss: 0.0000062851245275\n",
      "Epoch: 8340/20000, Loss: 0.0000226274878514\n",
      "Epoch: 8350/20000, Loss: 0.0000071361687333\n",
      "Epoch: 8360/20000, Loss: 0.0000067975965976\n",
      "Epoch: 8370/20000, Loss: 0.0000072078441917\n",
      "Epoch: 8380/20000, Loss: 0.0000064306786953\n",
      "Epoch: 8390/20000, Loss: 0.0000061142141021\n",
      "Epoch: 8400/20000, Loss: 0.0000060819475038\n",
      "Epoch: 8410/20000, Loss: 0.0000060555398704\n",
      "Epoch: 8420/20000, Loss: 0.0000060227548602\n",
      "Epoch: 8430/20000, Loss: 0.0000059930812313\n",
      "Epoch: 8440/20000, Loss: 0.0000059645176407\n",
      "Epoch: 8450/20000, Loss: 0.0000059370545387\n",
      "Epoch: 8460/20000, Loss: 0.0000059099602367\n",
      "Epoch: 8470/20000, Loss: 0.0000058830059970\n",
      "Epoch: 8480/20000, Loss: 0.0000058561040532\n",
      "Epoch: 8490/20000, Loss: 0.0000058293121583\n",
      "Epoch: 8500/20000, Loss: 0.0000058026193983\n",
      "Epoch: 8510/20000, Loss: 0.0000057760089476\n",
      "Epoch: 8520/20000, Loss: 0.0000057494817156\n",
      "Epoch: 8530/20000, Loss: 0.0000057230363382\n",
      "Epoch: 8540/20000, Loss: 0.0000056966800912\n",
      "Epoch: 8550/20000, Loss: 0.0000056703943301\n",
      "Epoch: 8560/20000, Loss: 0.0000056441876950\n",
      "Epoch: 8570/20000, Loss: 0.0000056180570027\n",
      "Epoch: 8580/20000, Loss: 0.0000055920049817\n",
      "Epoch: 8590/20000, Loss: 0.0000055660289036\n",
      "Epoch: 8600/20000, Loss: 0.0000055401292229\n",
      "Epoch: 8610/20000, Loss: 0.0000055143373174\n",
      "Epoch: 8620/20000, Loss: 0.0000054909596656\n",
      "Epoch: 8630/20000, Loss: 0.0000059074100136\n",
      "Epoch: 8640/20000, Loss: 0.0000203503386729\n",
      "Epoch: 8650/20000, Loss: 0.0000105418457679\n",
      "Epoch: 8660/20000, Loss: 0.0000072379370977\n",
      "Epoch: 8670/20000, Loss: 0.0000060015036070\n",
      "Epoch: 8680/20000, Loss: 0.0000055900177358\n",
      "Epoch: 8690/20000, Loss: 0.0000054121478570\n",
      "Epoch: 8700/20000, Loss: 0.0000053276662584\n",
      "Epoch: 8710/20000, Loss: 0.0000052840505305\n",
      "Epoch: 8720/20000, Loss: 0.0000052571808737\n",
      "Epoch: 8730/20000, Loss: 0.0000052330901781\n",
      "Epoch: 8740/20000, Loss: 0.0000052071823120\n",
      "Epoch: 8750/20000, Loss: 0.0000051826068557\n",
      "Epoch: 8760/20000, Loss: 0.0000051580145737\n",
      "Epoch: 8770/20000, Loss: 0.0000051336387514\n",
      "Epoch: 8780/20000, Loss: 0.0000051093056754\n",
      "Epoch: 8790/20000, Loss: 0.0000050850590014\n",
      "Epoch: 8800/20000, Loss: 0.0000050609046411\n",
      "Epoch: 8810/20000, Loss: 0.0000050368171287\n",
      "Epoch: 8820/20000, Loss: 0.0000050128046496\n",
      "Epoch: 8830/20000, Loss: 0.0000049888667490\n",
      "Epoch: 8840/20000, Loss: 0.0000049649961511\n",
      "Epoch: 8850/20000, Loss: 0.0000049411960390\n",
      "Epoch: 8860/20000, Loss: 0.0000049174677770\n",
      "Epoch: 8870/20000, Loss: 0.0000048939709814\n",
      "Epoch: 8880/20000, Loss: 0.0000048916617743\n",
      "Epoch: 8890/20000, Loss: 0.0000101728110167\n",
      "Epoch: 8900/20000, Loss: 0.0000145760031955\n",
      "Epoch: 8910/20000, Loss: 0.0000076573915067\n",
      "Epoch: 8920/20000, Loss: 0.0000060135630520\n",
      "Epoch: 8930/20000, Loss: 0.0000051664001148\n",
      "Epoch: 8940/20000, Loss: 0.0000048976380640\n",
      "Epoch: 8950/20000, Loss: 0.0000047832299970\n",
      "Epoch: 8960/20000, Loss: 0.0000047218645705\n",
      "Epoch: 8970/20000, Loss: 0.0000046855848268\n",
      "Epoch: 8980/20000, Loss: 0.0000046591694627\n",
      "Epoch: 8990/20000, Loss: 0.0000046367167670\n",
      "Epoch: 9000/20000, Loss: 0.0000046138297876\n",
      "Epoch: 9010/20000, Loss: 0.0000045910628614\n",
      "Epoch: 9020/20000, Loss: 0.0000045686829253\n",
      "Epoch: 9030/20000, Loss: 0.0000045463179958\n",
      "Epoch: 9040/20000, Loss: 0.0000045240644795\n",
      "Epoch: 9050/20000, Loss: 0.0000045018846322\n",
      "Epoch: 9060/20000, Loss: 0.0000044797839109\n",
      "Epoch: 9070/20000, Loss: 0.0000044577532208\n",
      "Epoch: 9080/20000, Loss: 0.0000044357984734\n",
      "Epoch: 9090/20000, Loss: 0.0000044138996600\n",
      "Epoch: 9100/20000, Loss: 0.0000043920854296\n",
      "Epoch: 9110/20000, Loss: 0.0000043703344090\n",
      "Epoch: 9120/20000, Loss: 0.0000043486511458\n",
      "Epoch: 9130/20000, Loss: 0.0000043270697461\n",
      "Epoch: 9140/20000, Loss: 0.0000043085183279\n",
      "Epoch: 9150/20000, Loss: 0.0000048498282013\n",
      "Epoch: 9160/20000, Loss: 0.0000165554065461\n",
      "Epoch: 9170/20000, Loss: 0.0000092887521532\n",
      "Epoch: 9180/20000, Loss: 0.0000060275856413\n",
      "Epoch: 9190/20000, Loss: 0.0000048160550250\n",
      "Epoch: 9200/20000, Loss: 0.0000043848503992\n",
      "Epoch: 9210/20000, Loss: 0.0000042567407945\n",
      "Epoch: 9220/20000, Loss: 0.0000041820667320\n",
      "Epoch: 9230/20000, Loss: 0.0000041383523239\n",
      "Epoch: 9240/20000, Loss: 0.0000041126845645\n",
      "Epoch: 9250/20000, Loss: 0.0000040927716327\n",
      "Epoch: 9260/20000, Loss: 0.0000040716417971\n",
      "Epoch: 9270/20000, Loss: 0.0000040508157326\n",
      "Epoch: 9280/20000, Loss: 0.0000040303975766\n",
      "Epoch: 9290/20000, Loss: 0.0000040100326260\n",
      "Epoch: 9300/20000, Loss: 0.0000039897631723\n",
      "Epoch: 9310/20000, Loss: 0.0000039695937630\n",
      "Epoch: 9320/20000, Loss: 0.0000039494912016\n",
      "Epoch: 9330/20000, Loss: 0.0000039294668568\n",
      "Epoch: 9340/20000, Loss: 0.0000039095148168\n",
      "Epoch: 9350/20000, Loss: 0.0000038896309889\n",
      "Epoch: 9360/20000, Loss: 0.0000038698176468\n",
      "Epoch: 9370/20000, Loss: 0.0000038500743358\n",
      "Epoch: 9380/20000, Loss: 0.0000038304051486\n",
      "Epoch: 9390/20000, Loss: 0.0000038108003082\n",
      "Epoch: 9400/20000, Loss: 0.0000037912911921\n",
      "Epoch: 9410/20000, Loss: 0.0000037772981614\n",
      "Epoch: 9420/20000, Loss: 0.0000057207248574\n",
      "Epoch: 9430/20000, Loss: 0.0000066679290285\n",
      "Epoch: 9440/20000, Loss: 0.0000056463272813\n",
      "Epoch: 9450/20000, Loss: 0.0000051241108849\n",
      "Epoch: 9460/20000, Loss: 0.0000041411071834\n",
      "Epoch: 9470/20000, Loss: 0.0000037410698042\n",
      "Epoch: 9480/20000, Loss: 0.0000036637595713\n",
      "Epoch: 9490/20000, Loss: 0.0000036501398881\n",
      "Epoch: 9500/20000, Loss: 0.0000036236708638\n",
      "Epoch: 9510/20000, Loss: 0.0000036036215079\n",
      "Epoch: 9520/20000, Loss: 0.0000035838199892\n",
      "Epoch: 9530/20000, Loss: 0.0000035650600694\n",
      "Epoch: 9540/20000, Loss: 0.0000035467369344\n",
      "Epoch: 9550/20000, Loss: 0.0000035283874240\n",
      "Epoch: 9560/20000, Loss: 0.0000035101204503\n",
      "Epoch: 9570/20000, Loss: 0.0000034919939935\n",
      "Epoch: 9580/20000, Loss: 0.0000034739514376\n",
      "Epoch: 9590/20000, Loss: 0.0000034559836877\n",
      "Epoch: 9600/20000, Loss: 0.0000034381037040\n",
      "Epoch: 9610/20000, Loss: 0.0000034202953429\n",
      "Epoch: 9620/20000, Loss: 0.0000034025597415\n",
      "Epoch: 9630/20000, Loss: 0.0000033848991734\n",
      "Epoch: 9640/20000, Loss: 0.0000033673184134\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 9650/20000, Loss: 0.0000033498015455\n",
      "Epoch: 9660/20000, Loss: 0.0000033323606203\n",
      "Epoch: 9670/20000, Loss: 0.0000033149945011\n",
      "Epoch: 9680/20000, Loss: 0.0000032976963666\n",
      "Epoch: 9690/20000, Loss: 0.0000032804680359\n",
      "Epoch: 9700/20000, Loss: 0.0000032633229239\n",
      "Epoch: 9710/20000, Loss: 0.0000032474006275\n",
      "Epoch: 9720/20000, Loss: 0.0000034555089314\n",
      "Epoch: 9730/20000, Loss: 0.0000284282359644\n",
      "Epoch: 9740/20000, Loss: 0.0000067104069785\n",
      "Epoch: 9750/20000, Loss: 0.0000048343413255\n",
      "Epoch: 9760/20000, Loss: 0.0000039020660552\n",
      "Epoch: 9770/20000, Loss: 0.0000034495049022\n",
      "Epoch: 9780/20000, Loss: 0.0000032323907817\n",
      "Epoch: 9790/20000, Loss: 0.0000031561933156\n",
      "Epoch: 9800/20000, Loss: 0.0000031247677725\n",
      "Epoch: 9810/20000, Loss: 0.0000031016124922\n",
      "Epoch: 9820/20000, Loss: 0.0000030817279821\n",
      "Epoch: 9830/20000, Loss: 0.0000030644689559\n",
      "Epoch: 9840/20000, Loss: 0.0000030484347917\n",
      "Epoch: 9850/20000, Loss: 0.0000030323626561\n",
      "Epoch: 9860/20000, Loss: 0.0000030164269447\n",
      "Epoch: 9870/20000, Loss: 0.0000030006260658\n",
      "Epoch: 9880/20000, Loss: 0.0000029849154544\n",
      "Epoch: 9890/20000, Loss: 0.0000029692921544\n",
      "Epoch: 9900/20000, Loss: 0.0000029537452519\n",
      "Epoch: 9910/20000, Loss: 0.0000029382742923\n",
      "Epoch: 9920/20000, Loss: 0.0000029228854146\n",
      "Epoch: 9930/20000, Loss: 0.0000029075747534\n",
      "Epoch: 9940/20000, Loss: 0.0000028923350328\n",
      "Epoch: 9950/20000, Loss: 0.0000028771692087\n",
      "Epoch: 9960/20000, Loss: 0.0000028620754620\n",
      "Epoch: 9970/20000, Loss: 0.0000028470599318\n",
      "Epoch: 9980/20000, Loss: 0.0000028321805985\n",
      "Epoch: 9990/20000, Loss: 0.0000028206729894\n",
      "Epoch: 10000/20000, Loss: 0.0000032483956147\n",
      "Epoch: 10010/20000, Loss: 0.0000205982832995\n",
      "Epoch: 10020/20000, Loss: 0.0000059741769292\n",
      "Epoch: 10030/20000, Loss: 0.0000036897124573\n",
      "Epoch: 10040/20000, Loss: 0.0000030321798477\n",
      "Epoch: 10050/20000, Loss: 0.0000027904991384\n",
      "Epoch: 10060/20000, Loss: 0.0000027380835945\n",
      "Epoch: 10070/20000, Loss: 0.0000027257206057\n",
      "Epoch: 10080/20000, Loss: 0.0000027062362733\n",
      "Epoch: 10090/20000, Loss: 0.0000026869047360\n",
      "Epoch: 10100/20000, Loss: 0.0000026732145670\n",
      "Epoch: 10110/20000, Loss: 0.0000026588304536\n",
      "Epoch: 10120/20000, Loss: 0.0000026449797588\n",
      "Epoch: 10130/20000, Loss: 0.0000026311004149\n",
      "Epoch: 10140/20000, Loss: 0.0000026174079721\n",
      "Epoch: 10150/20000, Loss: 0.0000026038198939\n",
      "Epoch: 10160/20000, Loss: 0.0000025903098049\n",
      "Epoch: 10170/20000, Loss: 0.0000025768758860\n",
      "Epoch: 10180/20000, Loss: 0.0000025635254133\n",
      "Epoch: 10190/20000, Loss: 0.0000025502497465\n",
      "Epoch: 10200/20000, Loss: 0.0000025370450203\n",
      "Epoch: 10210/20000, Loss: 0.0000025239148727\n",
      "Epoch: 10220/20000, Loss: 0.0000025108629416\n",
      "Epoch: 10230/20000, Loss: 0.0000024978785405\n",
      "Epoch: 10240/20000, Loss: 0.0000024852911338\n",
      "Epoch: 10250/20000, Loss: 0.0000025177321277\n",
      "Epoch: 10260/20000, Loss: 0.0000125678971017\n",
      "Epoch: 10270/20000, Loss: 0.0000112403149615\n",
      "Epoch: 10280/20000, Loss: 0.0000050580724746\n",
      "Epoch: 10290/20000, Loss: 0.0000028993995329\n",
      "Epoch: 10300/20000, Loss: 0.0000024660562303\n",
      "Epoch: 10310/20000, Loss: 0.0000024147150270\n",
      "Epoch: 10320/20000, Loss: 0.0000024005096293\n",
      "Epoch: 10330/20000, Loss: 0.0000023878010325\n",
      "Epoch: 10340/20000, Loss: 0.0000023761133434\n",
      "Epoch: 10350/20000, Loss: 0.0000023642296583\n",
      "Epoch: 10360/20000, Loss: 0.0000023513987344\n",
      "Epoch: 10370/20000, Loss: 0.0000023385623535\n",
      "Epoch: 10380/20000, Loss: 0.0000023265497475\n",
      "Epoch: 10390/20000, Loss: 0.0000023147242700\n",
      "Epoch: 10400/20000, Loss: 0.0000023029360818\n",
      "Epoch: 10410/20000, Loss: 0.0000022912734039\n",
      "Epoch: 10420/20000, Loss: 0.0000022796839403\n",
      "Epoch: 10430/20000, Loss: 0.0000022681749670\n",
      "Epoch: 10440/20000, Loss: 0.0000022567435281\n",
      "Epoch: 10450/20000, Loss: 0.0000022453823476\n",
      "Epoch: 10460/20000, Loss: 0.0000022340950636\n",
      "Epoch: 10470/20000, Loss: 0.0000022228753096\n",
      "Epoch: 10480/20000, Loss: 0.0000022117285425\n",
      "Epoch: 10490/20000, Loss: 0.0000022008493943\n",
      "Epoch: 10500/20000, Loss: 0.0000022120609628\n",
      "Epoch: 10510/20000, Loss: 0.0000039913311412\n",
      "Epoch: 10520/20000, Loss: 0.0000037205072658\n",
      "Epoch: 10530/20000, Loss: 0.0000046025020310\n",
      "Epoch: 10540/20000, Loss: 0.0000031793908875\n",
      "Epoch: 10550/20000, Loss: 0.0000025008430384\n",
      "Epoch: 10560/20000, Loss: 0.0000021845271476\n",
      "Epoch: 10570/20000, Loss: 0.0000021324544832\n",
      "Epoch: 10580/20000, Loss: 0.0000021356527213\n",
      "Epoch: 10590/20000, Loss: 0.0000021370287868\n",
      "Epoch: 10600/20000, Loss: 0.0000022400504349\n",
      "Epoch: 10610/20000, Loss: 0.0000042426781874\n",
      "Epoch: 10620/20000, Loss: 0.0000031858519378\n",
      "Epoch: 10630/20000, Loss: 0.0000022674860247\n",
      "Epoch: 10640/20000, Loss: 0.0000020686891276\n",
      "Epoch: 10650/20000, Loss: 0.0000020472443794\n",
      "Epoch: 10660/20000, Loss: 0.0000020468023649\n",
      "Epoch: 10670/20000, Loss: 0.0000020475558813\n",
      "Epoch: 10680/20000, Loss: 0.0000020183133529\n",
      "Epoch: 10690/20000, Loss: 0.0000020102247618\n",
      "Epoch: 10700/20000, Loss: 0.0000019984231585\n",
      "Epoch: 10710/20000, Loss: 0.0000020196332571\n",
      "Epoch: 10720/20000, Loss: 0.0000030014161894\n",
      "Epoch: 10730/20000, Loss: 0.0000087424787125\n",
      "Epoch: 10740/20000, Loss: 0.0000022188573894\n",
      "Epoch: 10750/20000, Loss: 0.0000024823239073\n",
      "Epoch: 10760/20000, Loss: 0.0000021826592729\n",
      "Epoch: 10770/20000, Loss: 0.0000019356043595\n",
      "Epoch: 10780/20000, Loss: 0.0000019393230559\n",
      "Epoch: 10790/20000, Loss: 0.0000019275466911\n",
      "Epoch: 10800/20000, Loss: 0.0000019113188046\n",
      "Epoch: 10810/20000, Loss: 0.0000018985017505\n",
      "Epoch: 10820/20000, Loss: 0.0000018883987423\n",
      "Epoch: 10830/20000, Loss: 0.0000018800218413\n",
      "Epoch: 10840/20000, Loss: 0.0000018706828087\n",
      "Epoch: 10850/20000, Loss: 0.0000018619501816\n",
      "Epoch: 10860/20000, Loss: 0.0000018538177073\n",
      "Epoch: 10870/20000, Loss: 0.0000018664396748\n",
      "Epoch: 10880/20000, Loss: 0.0000037010800042\n",
      "Epoch: 10890/20000, Loss: 0.0000028114429824\n",
      "Epoch: 10900/20000, Loss: 0.0000048335841711\n",
      "Epoch: 10910/20000, Loss: 0.0000026839472866\n",
      "Epoch: 10920/20000, Loss: 0.0000019235199034\n",
      "Epoch: 10930/20000, Loss: 0.0000018097118755\n",
      "Epoch: 10940/20000, Loss: 0.0000018329030809\n",
      "Epoch: 10950/20000, Loss: 0.0000018016514787\n",
      "Epoch: 10960/20000, Loss: 0.0000017794216092\n",
      "Epoch: 10970/20000, Loss: 0.0000017733525510\n",
      "Epoch: 10980/20000, Loss: 0.0000017628644855\n",
      "Epoch: 10990/20000, Loss: 0.0000017549461973\n",
      "Epoch: 11000/20000, Loss: 0.0000017469023987\n",
      "Epoch: 11010/20000, Loss: 0.0000017389128288\n",
      "Epoch: 11020/20000, Loss: 0.0000017310611611\n",
      "Epoch: 11030/20000, Loss: 0.0000017232908931\n",
      "Epoch: 11040/20000, Loss: 0.0000017155739442\n",
      "Epoch: 11050/20000, Loss: 0.0000017079120198\n",
      "Epoch: 11060/20000, Loss: 0.0000017002992081\n",
      "Epoch: 11070/20000, Loss: 0.0000016927333490\n",
      "Epoch: 11080/20000, Loss: 0.0000016852231965\n",
      "Epoch: 11090/20000, Loss: 0.0000016781292516\n",
      "Epoch: 11100/20000, Loss: 0.0000018168062752\n",
      "Epoch: 11110/20000, Loss: 0.0000237089061557\n",
      "Epoch: 11120/20000, Loss: 0.0000025197166451\n",
      "Epoch: 11130/20000, Loss: 0.0000019438507479\n",
      "Epoch: 11140/20000, Loss: 0.0000020740233140\n",
      "Epoch: 11150/20000, Loss: 0.0000018898896315\n",
      "Epoch: 11160/20000, Loss: 0.0000017320900270\n",
      "Epoch: 11170/20000, Loss: 0.0000016563978988\n",
      "Epoch: 11180/20000, Loss: 0.0000016301750065\n",
      "Epoch: 11190/20000, Loss: 0.0000016201232711\n",
      "Epoch: 11200/20000, Loss: 0.0000016123684645\n",
      "Epoch: 11210/20000, Loss: 0.0000016050672684\n",
      "Epoch: 11220/20000, Loss: 0.0000015978931742\n",
      "Epoch: 11230/20000, Loss: 0.0000015909404283\n",
      "Epoch: 11240/20000, Loss: 0.0000015841877712\n",
      "Epoch: 11250/20000, Loss: 0.0000015774733129\n",
      "Epoch: 11260/20000, Loss: 0.0000015708276351\n",
      "Epoch: 11270/20000, Loss: 0.0000015642355038\n",
      "Epoch: 11280/20000, Loss: 0.0000015576878241\n",
      "Epoch: 11290/20000, Loss: 0.0000015511881202\n",
      "Epoch: 11300/20000, Loss: 0.0000015447275246\n",
      "Epoch: 11310/20000, Loss: 0.0000015383088794\n",
      "Epoch: 11320/20000, Loss: 0.0000015319322983\n",
      "Epoch: 11330/20000, Loss: 0.0000015255939161\n",
      "Epoch: 11340/20000, Loss: 0.0000015192914589\n",
      "Epoch: 11350/20000, Loss: 0.0000015130229940\n",
      "Epoch: 11360/20000, Loss: 0.0000015068255834\n",
      "Epoch: 11370/20000, Loss: 0.0000015020012825\n",
      "Epoch: 11380/20000, Loss: 0.0000016399496872\n",
      "Epoch: 11390/20000, Loss: 0.0000178722948476\n",
      "Epoch: 11400/20000, Loss: 0.0000029473321774\n",
      "Epoch: 11410/20000, Loss: 0.0000025235324301\n",
      "Epoch: 11420/20000, Loss: 0.0000019061259309\n",
      "Epoch: 11430/20000, Loss: 0.0000016726978629\n",
      "Epoch: 11440/20000, Loss: 0.0000015644953919\n",
      "Epoch: 11450/20000, Loss: 0.0000014992092474\n",
      "Epoch: 11460/20000, Loss: 0.0000014625239828\n",
      "Epoch: 11470/20000, Loss: 0.0000014510106894\n",
      "Epoch: 11480/20000, Loss: 0.0000014464441165\n",
      "Epoch: 11490/20000, Loss: 0.0000014389887610\n",
      "Epoch: 11500/20000, Loss: 0.0000014331757257\n",
      "Epoch: 11510/20000, Loss: 0.0000014271934106\n",
      "Epoch: 11520/20000, Loss: 0.0000014214832618\n",
      "Epoch: 11530/20000, Loss: 0.0000014157668602\n",
      "Epoch: 11540/20000, Loss: 0.0000014101090073\n",
      "Epoch: 11550/20000, Loss: 0.0000014044959471\n",
      "Epoch: 11560/20000, Loss: 0.0000013989185845\n",
      "Epoch: 11570/20000, Loss: 0.0000013933764649\n",
      "Epoch: 11580/20000, Loss: 0.0000013878659502\n",
      "Epoch: 11590/20000, Loss: 0.0000013823884046\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 11600/20000, Loss: 0.0000013769392808\n",
      "Epoch: 11610/20000, Loss: 0.0000013715340401\n",
      "Epoch: 11620/20000, Loss: 0.0000013665079450\n",
      "Epoch: 11630/20000, Loss: 0.0000013638857581\n",
      "Epoch: 11640/20000, Loss: 0.0000017205672975\n",
      "Epoch: 11650/20000, Loss: 0.0000201526163437\n",
      "Epoch: 11660/20000, Loss: 0.0000032735274544\n",
      "Epoch: 11670/20000, Loss: 0.0000018112496036\n",
      "Epoch: 11680/20000, Loss: 0.0000015146664509\n",
      "Epoch: 11690/20000, Loss: 0.0000013933675973\n",
      "Epoch: 11700/20000, Loss: 0.0000013514992361\n",
      "Epoch: 11710/20000, Loss: 0.0000013380492874\n",
      "Epoch: 11720/20000, Loss: 0.0000013296684074\n",
      "Epoch: 11730/20000, Loss: 0.0000013212879821\n",
      "Epoch: 11740/20000, Loss: 0.0000013142381476\n",
      "Epoch: 11750/20000, Loss: 0.0000013083864587\n",
      "Epoch: 11760/20000, Loss: 0.0000013032204151\n",
      "Epoch: 11770/20000, Loss: 0.0000012980407291\n",
      "Epoch: 11780/20000, Loss: 0.0000012930266848\n",
      "Epoch: 11790/20000, Loss: 0.0000012880261693\n",
      "Epoch: 11800/20000, Loss: 0.0000012830853393\n",
      "Epoch: 11810/20000, Loss: 0.0000012781723626\n",
      "Epoch: 11820/20000, Loss: 0.0000012732973573\n",
      "Epoch: 11830/20000, Loss: 0.0000012684455442\n",
      "Epoch: 11840/20000, Loss: 0.0000012636227211\n",
      "Epoch: 11850/20000, Loss: 0.0000012588187701\n",
      "Epoch: 11860/20000, Loss: 0.0000012540434682\n",
      "Epoch: 11870/20000, Loss: 0.0000012492901078\n",
      "Epoch: 11880/20000, Loss: 0.0000012445713082\n",
      "Epoch: 11890/20000, Loss: 0.0000012404020708\n",
      "Epoch: 11900/20000, Loss: 0.0000012958196294\n",
      "Epoch: 11910/20000, Loss: 0.0000119417327369\n",
      "Epoch: 11920/20000, Loss: 0.0000088579063231\n",
      "Epoch: 11930/20000, Loss: 0.0000039667038436\n",
      "Epoch: 11940/20000, Loss: 0.0000021099281184\n",
      "Epoch: 11950/20000, Loss: 0.0000015128510995\n",
      "Epoch: 11960/20000, Loss: 0.0000013250978554\n",
      "Epoch: 11970/20000, Loss: 0.0000012576583686\n",
      "Epoch: 11980/20000, Loss: 0.0000012253381101\n",
      "Epoch: 11990/20000, Loss: 0.0000012074538063\n",
      "Epoch: 12000/20000, Loss: 0.0000011992082136\n",
      "Epoch: 12010/20000, Loss: 0.0000011950321550\n",
      "Epoch: 12020/20000, Loss: 0.0000011902141068\n",
      "Epoch: 12030/20000, Loss: 0.0000011854953073\n",
      "Epoch: 12040/20000, Loss: 0.0000011810543583\n",
      "Epoch: 12050/20000, Loss: 0.0000011766082935\n",
      "Epoch: 12060/20000, Loss: 0.0000011722128193\n",
      "Epoch: 12070/20000, Loss: 0.0000011678564533\n",
      "Epoch: 12080/20000, Loss: 0.0000011635282817\n",
      "Epoch: 12090/20000, Loss: 0.0000011594158877\n",
      "Epoch: 12100/20000, Loss: 0.0000011712953665\n",
      "Epoch: 12110/20000, Loss: 0.0000026235761652\n",
      "Epoch: 12120/20000, Loss: 0.0000016859065681\n",
      "Epoch: 12130/20000, Loss: 0.0000013696643464\n",
      "Epoch: 12140/20000, Loss: 0.0000011689811572\n",
      "Epoch: 12150/20000, Loss: 0.0000012036963426\n",
      "Epoch: 12160/20000, Loss: 0.0000012228525748\n",
      "Epoch: 12170/20000, Loss: 0.0000017532272523\n",
      "Epoch: 12180/20000, Loss: 0.0000054497813835\n",
      "Epoch: 12190/20000, Loss: 0.0000019731762677\n",
      "Epoch: 12200/20000, Loss: 0.0000013601297724\n",
      "Epoch: 12210/20000, Loss: 0.0000011480069588\n",
      "Epoch: 12220/20000, Loss: 0.0000011138411082\n",
      "Epoch: 12230/20000, Loss: 0.0000011422629314\n",
      "Epoch: 12240/20000, Loss: 0.0000011014428765\n",
      "Epoch: 12250/20000, Loss: 0.0000011115399730\n",
      "Epoch: 12260/20000, Loss: 0.0000011688473478\n",
      "Epoch: 12270/20000, Loss: 0.0000023111849714\n",
      "Epoch: 12280/20000, Loss: 0.0000052038822105\n",
      "Epoch: 12290/20000, Loss: 0.0000019918647922\n",
      "Epoch: 12300/20000, Loss: 0.0000011533060160\n",
      "Epoch: 12310/20000, Loss: 0.0000010841988569\n",
      "Epoch: 12320/20000, Loss: 0.0000010760153373\n",
      "Epoch: 12330/20000, Loss: 0.0000010695252968\n",
      "Epoch: 12340/20000, Loss: 0.0000010710532479\n",
      "Epoch: 12350/20000, Loss: 0.0000010669796211\n",
      "Epoch: 12360/20000, Loss: 0.0000010579683476\n",
      "Epoch: 12370/20000, Loss: 0.0000010536857644\n",
      "Epoch: 12380/20000, Loss: 0.0000010525616290\n",
      "Epoch: 12390/20000, Loss: 0.0000011126790014\n",
      "Epoch: 12400/20000, Loss: 0.0000044055177568\n",
      "Epoch: 12410/20000, Loss: 0.0000012522383486\n",
      "Epoch: 12420/20000, Loss: 0.0000030289616006\n",
      "Epoch: 12430/20000, Loss: 0.0000010945567510\n",
      "Epoch: 12440/20000, Loss: 0.0000012669814851\n",
      "Epoch: 12450/20000, Loss: 0.0000010358620557\n",
      "Epoch: 12460/20000, Loss: 0.0000010612495771\n",
      "Epoch: 12470/20000, Loss: 0.0000010271945712\n",
      "Epoch: 12480/20000, Loss: 0.0000010180493746\n",
      "Epoch: 12490/20000, Loss: 0.0000010145378155\n",
      "Epoch: 12500/20000, Loss: 0.0000010106564332\n",
      "Epoch: 12510/20000, Loss: 0.0000010068290521\n",
      "Epoch: 12520/20000, Loss: 0.0000010032384807\n",
      "Epoch: 12530/20000, Loss: 0.0000010011466429\n",
      "Epoch: 12540/20000, Loss: 0.0000011599939853\n",
      "Epoch: 12550/20000, Loss: 0.0000015067499817\n",
      "Epoch: 12560/20000, Loss: 0.0000014062891296\n",
      "Epoch: 12570/20000, Loss: 0.0000012774526112\n",
      "Epoch: 12580/20000, Loss: 0.0000032981838558\n",
      "Epoch: 12590/20000, Loss: 0.0000013743132286\n",
      "Epoch: 12600/20000, Loss: 0.0000014333725176\n",
      "Epoch: 12610/20000, Loss: 0.0000012479908946\n",
      "Epoch: 12620/20000, Loss: 0.0000010136769788\n",
      "Epoch: 12630/20000, Loss: 0.0000009972175121\n",
      "Epoch: 12640/20000, Loss: 0.0000009666082406\n",
      "Epoch: 12650/20000, Loss: 0.0000009907751064\n",
      "Epoch: 12660/20000, Loss: 0.0000013075034531\n",
      "Epoch: 12670/20000, Loss: 0.0000065278622969\n",
      "Epoch: 12680/20000, Loss: 0.0000024301468784\n",
      "Epoch: 12690/20000, Loss: 0.0000018101790147\n",
      "Epoch: 12700/20000, Loss: 0.0000012440211776\n",
      "Epoch: 12710/20000, Loss: 0.0000010285774579\n",
      "Epoch: 12720/20000, Loss: 0.0000009746972864\n",
      "Epoch: 12730/20000, Loss: 0.0000009562529613\n",
      "Epoch: 12740/20000, Loss: 0.0000009393347113\n",
      "Epoch: 12750/20000, Loss: 0.0000009309694633\n",
      "Epoch: 12760/20000, Loss: 0.0000009282217093\n",
      "Epoch: 12770/20000, Loss: 0.0000009284239013\n",
      "Epoch: 12780/20000, Loss: 0.0000009700531791\n",
      "Epoch: 12790/20000, Loss: 0.0000024390619728\n",
      "Epoch: 12800/20000, Loss: 0.0000040043100853\n",
      "Epoch: 12810/20000, Loss: 0.0000009925591939\n",
      "Epoch: 12820/20000, Loss: 0.0000016141833612\n",
      "Epoch: 12830/20000, Loss: 0.0000009971663530\n",
      "Epoch: 12840/20000, Loss: 0.0000009232747402\n",
      "Epoch: 12850/20000, Loss: 0.0000009292235177\n",
      "Epoch: 12860/20000, Loss: 0.0000009116601518\n",
      "Epoch: 12870/20000, Loss: 0.0000009007185895\n",
      "Epoch: 12880/20000, Loss: 0.0000008945509080\n",
      "Epoch: 12890/20000, Loss: 0.0000008900823332\n",
      "Epoch: 12900/20000, Loss: 0.0000008866595067\n",
      "Epoch: 12910/20000, Loss: 0.0000008834696246\n",
      "Epoch: 12920/20000, Loss: 0.0000008803289688\n",
      "Epoch: 12930/20000, Loss: 0.0000008777522567\n",
      "Epoch: 12940/20000, Loss: 0.0000008896919326\n",
      "Epoch: 12950/20000, Loss: 0.0000018658060981\n",
      "Epoch: 12960/20000, Loss: 0.0000086896343419\n",
      "Epoch: 12970/20000, Loss: 0.0000015047153283\n",
      "Epoch: 12980/20000, Loss: 0.0000011872058394\n",
      "Epoch: 12990/20000, Loss: 0.0000011895218677\n",
      "Epoch: 13000/20000, Loss: 0.0000009317676017\n",
      "Epoch: 13010/20000, Loss: 0.0000008939480267\n",
      "Epoch: 13020/20000, Loss: 0.0000008586996501\n",
      "Epoch: 13030/20000, Loss: 0.0000008549229733\n",
      "Epoch: 13040/20000, Loss: 0.0000008518993013\n",
      "Epoch: 13050/20000, Loss: 0.0000008475525419\n",
      "Epoch: 13060/20000, Loss: 0.0000008439798762\n",
      "Epoch: 13070/20000, Loss: 0.0000008408276244\n",
      "Epoch: 13080/20000, Loss: 0.0000008378098642\n",
      "Epoch: 13090/20000, Loss: 0.0000008348644656\n",
      "Epoch: 13100/20000, Loss: 0.0000008319940434\n",
      "Epoch: 13110/20000, Loss: 0.0000008291191307\n",
      "Epoch: 13120/20000, Loss: 0.0000008262759934\n",
      "Epoch: 13130/20000, Loss: 0.0000008237070119\n",
      "Epoch: 13140/20000, Loss: 0.0000008364671089\n",
      "Epoch: 13150/20000, Loss: 0.0000027259243325\n",
      "Epoch: 13160/20000, Loss: 0.0000009757785620\n",
      "Epoch: 13170/20000, Loss: 0.0000030544063065\n",
      "Epoch: 13180/20000, Loss: 0.0000019294900540\n",
      "Epoch: 13190/20000, Loss: 0.0000012326988781\n",
      "Epoch: 13200/20000, Loss: 0.0000009098690157\n",
      "Epoch: 13210/20000, Loss: 0.0000008131045774\n",
      "Epoch: 13220/20000, Loss: 0.0000008137655527\n",
      "Epoch: 13230/20000, Loss: 0.0000008101629874\n",
      "Epoch: 13240/20000, Loss: 0.0000008003535754\n",
      "Epoch: 13250/20000, Loss: 0.0000007984012313\n",
      "Epoch: 13260/20000, Loss: 0.0000007945981224\n",
      "Epoch: 13270/20000, Loss: 0.0000007918750953\n",
      "Epoch: 13280/20000, Loss: 0.0000007890812981\n",
      "Epoch: 13290/20000, Loss: 0.0000007863124551\n",
      "Epoch: 13300/20000, Loss: 0.0000007836006262\n",
      "Epoch: 13310/20000, Loss: 0.0000007809090334\n",
      "Epoch: 13320/20000, Loss: 0.0000007782389844\n",
      "Epoch: 13330/20000, Loss: 0.0000007755884326\n",
      "Epoch: 13340/20000, Loss: 0.0000007729470894\n",
      "Epoch: 13350/20000, Loss: 0.0000007703224014\n",
      "Epoch: 13360/20000, Loss: 0.0000007677095937\n",
      "Epoch: 13370/20000, Loss: 0.0000007651250371\n",
      "Epoch: 13380/20000, Loss: 0.0000007634542953\n",
      "Epoch: 13390/20000, Loss: 0.0000008567026839\n",
      "Epoch: 13400/20000, Loss: 0.0000143708184623\n",
      "Epoch: 13410/20000, Loss: 0.0000048837264330\n",
      "Epoch: 13420/20000, Loss: 0.0000025826461751\n",
      "Epoch: 13430/20000, Loss: 0.0000014059810383\n",
      "Epoch: 13440/20000, Loss: 0.0000010043263501\n",
      "Epoch: 13450/20000, Loss: 0.0000008546185768\n",
      "Epoch: 13460/20000, Loss: 0.0000007898458989\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 13470/20000, Loss: 0.0000007573898984\n",
      "Epoch: 13480/20000, Loss: 0.0000007456082471\n",
      "Epoch: 13490/20000, Loss: 0.0000007434902045\n",
      "Epoch: 13500/20000, Loss: 0.0000007405440101\n",
      "Epoch: 13510/20000, Loss: 0.0000007373478752\n",
      "Epoch: 13520/20000, Loss: 0.0000007348589861\n",
      "Epoch: 13530/20000, Loss: 0.0000007322515216\n",
      "Epoch: 13540/20000, Loss: 0.0000007297457500\n",
      "Epoch: 13550/20000, Loss: 0.0000007272713560\n",
      "Epoch: 13560/20000, Loss: 0.0000007248164593\n",
      "Epoch: 13570/20000, Loss: 0.0000007223773082\n",
      "Epoch: 13580/20000, Loss: 0.0000007199579954\n",
      "Epoch: 13590/20000, Loss: 0.0000007175549399\n",
      "Epoch: 13600/20000, Loss: 0.0000007154048376\n",
      "Epoch: 13610/20000, Loss: 0.0000007337789043\n",
      "Epoch: 13620/20000, Loss: 0.0000027670130294\n",
      "Epoch: 13630/20000, Loss: 0.0000025678916700\n",
      "Epoch: 13640/20000, Loss: 0.0000010178965795\n",
      "Epoch: 13650/20000, Loss: 0.0000009516553519\n",
      "Epoch: 13660/20000, Loss: 0.0000007347942983\n",
      "Epoch: 13670/20000, Loss: 0.0000007114250593\n",
      "Epoch: 13680/20000, Loss: 0.0000007037343721\n",
      "Epoch: 13690/20000, Loss: 0.0000007221552210\n",
      "Epoch: 13700/20000, Loss: 0.0000025428050776\n",
      "Epoch: 13710/20000, Loss: 0.0000015374578197\n",
      "Epoch: 13720/20000, Loss: 0.0000033025251014\n",
      "Epoch: 13730/20000, Loss: 0.0000008238063174\n",
      "Epoch: 13740/20000, Loss: 0.0000008332600032\n",
      "Epoch: 13750/20000, Loss: 0.0000007935813073\n",
      "Epoch: 13760/20000, Loss: 0.0000006886015740\n",
      "Epoch: 13770/20000, Loss: 0.0000006979521459\n",
      "Epoch: 13780/20000, Loss: 0.0000006834005148\n",
      "Epoch: 13790/20000, Loss: 0.0000006787130360\n",
      "Epoch: 13800/20000, Loss: 0.0000006768161143\n",
      "Epoch: 13810/20000, Loss: 0.0000006743021572\n",
      "Epoch: 13820/20000, Loss: 0.0000006718931900\n",
      "Epoch: 13830/20000, Loss: 0.0000006696057540\n",
      "Epoch: 13840/20000, Loss: 0.0000006673911912\n",
      "Epoch: 13850/20000, Loss: 0.0000006652346087\n",
      "Epoch: 13860/20000, Loss: 0.0000006630830853\n",
      "Epoch: 13870/20000, Loss: 0.0000006609570846\n",
      "Epoch: 13880/20000, Loss: 0.0000006588902011\n",
      "Epoch: 13890/20000, Loss: 0.0000006583221648\n",
      "Epoch: 13900/20000, Loss: 0.0000007641923503\n",
      "Epoch: 13910/20000, Loss: 0.0000111606277642\n",
      "Epoch: 13920/20000, Loss: 0.0000063022648646\n",
      "Epoch: 13930/20000, Loss: 0.0000024955384106\n",
      "Epoch: 13940/20000, Loss: 0.0000010085168469\n",
      "Epoch: 13950/20000, Loss: 0.0000006677603324\n",
      "Epoch: 13960/20000, Loss: 0.0000006725007893\n",
      "Epoch: 13970/20000, Loss: 0.0000006808579656\n",
      "Epoch: 13980/20000, Loss: 0.0000006495737921\n",
      "Epoch: 13990/20000, Loss: 0.0000006445825989\n",
      "Epoch: 14000/20000, Loss: 0.0000006415244229\n",
      "Epoch: 14010/20000, Loss: 0.0000006387314784\n",
      "Epoch: 14020/20000, Loss: 0.0000006362354270\n",
      "Epoch: 14030/20000, Loss: 0.0000006342058896\n",
      "Epoch: 14040/20000, Loss: 0.0000006321251362\n",
      "Epoch: 14050/20000, Loss: 0.0000006300768405\n",
      "Epoch: 14060/20000, Loss: 0.0000006280663456\n",
      "Epoch: 14070/20000, Loss: 0.0000006260757459\n",
      "Epoch: 14080/20000, Loss: 0.0000006240986181\n",
      "Epoch: 14090/20000, Loss: 0.0000006221420108\n",
      "Epoch: 14100/20000, Loss: 0.0000006202454301\n",
      "Epoch: 14110/20000, Loss: 0.0000006220349746\n",
      "Epoch: 14120/20000, Loss: 0.0000011141356708\n",
      "Epoch: 14130/20000, Loss: 0.0000020601412416\n",
      "Epoch: 14140/20000, Loss: 0.0000029495813578\n",
      "Epoch: 14150/20000, Loss: 0.0000013946122408\n",
      "Epoch: 14160/20000, Loss: 0.0000008501712614\n",
      "Epoch: 14170/20000, Loss: 0.0000007158368476\n",
      "Epoch: 14180/20000, Loss: 0.0000006686951224\n",
      "Epoch: 14190/20000, Loss: 0.0000006260408441\n",
      "Epoch: 14200/20000, Loss: 0.0000006070679319\n",
      "Epoch: 14210/20000, Loss: 0.0000006067925256\n",
      "Epoch: 14220/20000, Loss: 0.0000006132450494\n",
      "Epoch: 14230/20000, Loss: 0.0000007111951277\n",
      "Epoch: 14240/20000, Loss: 0.0000031714896522\n",
      "Epoch: 14250/20000, Loss: 0.0000007890544111\n",
      "Epoch: 14260/20000, Loss: 0.0000008154897841\n",
      "Epoch: 14270/20000, Loss: 0.0000010017536169\n",
      "Epoch: 14280/20000, Loss: 0.0000007659938319\n",
      "Epoch: 14290/20000, Loss: 0.0000006434116813\n",
      "Epoch: 14300/20000, Loss: 0.0000006092604394\n",
      "Epoch: 14310/20000, Loss: 0.0000005979319440\n",
      "Epoch: 14320/20000, Loss: 0.0000005887786756\n",
      "Epoch: 14330/20000, Loss: 0.0000005841103530\n",
      "Epoch: 14340/20000, Loss: 0.0000005829458587\n",
      "Epoch: 14350/20000, Loss: 0.0000005825845619\n",
      "Epoch: 14360/20000, Loss: 0.0000005971047585\n",
      "Epoch: 14370/20000, Loss: 0.0000011015415566\n",
      "Epoch: 14380/20000, Loss: 0.0000098573864307\n",
      "Epoch: 14390/20000, Loss: 0.0000022377148525\n",
      "Epoch: 14400/20000, Loss: 0.0000007586988886\n",
      "Epoch: 14410/20000, Loss: 0.0000009184864780\n",
      "Epoch: 14420/20000, Loss: 0.0000005849896638\n",
      "Epoch: 14430/20000, Loss: 0.0000005864706623\n",
      "Epoch: 14440/20000, Loss: 0.0000005853041216\n",
      "Epoch: 14450/20000, Loss: 0.0000005744132068\n",
      "Epoch: 14460/20000, Loss: 0.0000005683164659\n",
      "Epoch: 14470/20000, Loss: 0.0000005646929253\n",
      "Epoch: 14480/20000, Loss: 0.0000005621723744\n",
      "Epoch: 14490/20000, Loss: 0.0000005606515288\n",
      "Epoch: 14500/20000, Loss: 0.0000005587950227\n",
      "Epoch: 14510/20000, Loss: 0.0000005571687325\n",
      "Epoch: 14520/20000, Loss: 0.0000005559007263\n",
      "Epoch: 14530/20000, Loss: 0.0000005674780823\n",
      "Epoch: 14540/20000, Loss: 0.0000016543801848\n",
      "Epoch: 14550/20000, Loss: 0.0000050606045079\n",
      "Epoch: 14560/20000, Loss: 0.0000032983205074\n",
      "Epoch: 14570/20000, Loss: 0.0000007558966786\n",
      "Epoch: 14580/20000, Loss: 0.0000006000180974\n",
      "Epoch: 14590/20000, Loss: 0.0000006825184187\n",
      "Epoch: 14600/20000, Loss: 0.0000005791576996\n",
      "Epoch: 14610/20000, Loss: 0.0000005510989354\n",
      "Epoch: 14620/20000, Loss: 0.0000005516698138\n",
      "Epoch: 14630/20000, Loss: 0.0000005445727993\n",
      "Epoch: 14640/20000, Loss: 0.0000005423170819\n",
      "Epoch: 14650/20000, Loss: 0.0000005407383696\n",
      "Epoch: 14660/20000, Loss: 0.0000005388653790\n",
      "Epoch: 14670/20000, Loss: 0.0000005371799148\n",
      "Epoch: 14680/20000, Loss: 0.0000005355860253\n",
      "Epoch: 14690/20000, Loss: 0.0000005340265830\n",
      "Epoch: 14700/20000, Loss: 0.0000005325832149\n",
      "Epoch: 14710/20000, Loss: 0.0000005489202408\n",
      "Epoch: 14720/20000, Loss: 0.0000033196956792\n",
      "Epoch: 14730/20000, Loss: 0.0000008470327089\n",
      "Epoch: 14740/20000, Loss: 0.0000008149406199\n",
      "Epoch: 14750/20000, Loss: 0.0000006591484976\n",
      "Epoch: 14760/20000, Loss: 0.0000005764445632\n",
      "Epoch: 14770/20000, Loss: 0.0000007027209676\n",
      "Epoch: 14780/20000, Loss: 0.0000065141989580\n",
      "Epoch: 14790/20000, Loss: 0.0000031428146485\n",
      "Epoch: 14800/20000, Loss: 0.0000012956645605\n",
      "Epoch: 14810/20000, Loss: 0.0000005923350841\n",
      "Epoch: 14820/20000, Loss: 0.0000006881831496\n",
      "Epoch: 14830/20000, Loss: 0.0000005415557780\n",
      "Epoch: 14840/20000, Loss: 0.0000005167551080\n",
      "Epoch: 14850/20000, Loss: 0.0000005163755645\n",
      "Epoch: 14860/20000, Loss: 0.0000005141930046\n",
      "Epoch: 14870/20000, Loss: 0.0000005121771665\n",
      "Epoch: 14880/20000, Loss: 0.0000005109673680\n",
      "Epoch: 14890/20000, Loss: 0.0000005095476467\n",
      "Epoch: 14900/20000, Loss: 0.0000005079829748\n",
      "Epoch: 14910/20000, Loss: 0.0000005065370488\n",
      "Epoch: 14920/20000, Loss: 0.0000005051945209\n",
      "Epoch: 14930/20000, Loss: 0.0000005047588729\n",
      "Epoch: 14940/20000, Loss: 0.0000005705221042\n",
      "Epoch: 14950/20000, Loss: 0.0000082990554802\n",
      "Epoch: 14960/20000, Loss: 0.0000074230138125\n",
      "Epoch: 14970/20000, Loss: 0.0000019102487840\n",
      "Epoch: 14980/20000, Loss: 0.0000007036679790\n",
      "Epoch: 14990/20000, Loss: 0.0000005278847084\n",
      "Epoch: 15000/20000, Loss: 0.0000005409625032\n",
      "Epoch: 15010/20000, Loss: 0.0000005297152370\n",
      "Epoch: 15020/20000, Loss: 0.0000005053718155\n",
      "Epoch: 15030/20000, Loss: 0.0000004984846100\n",
      "Epoch: 15040/20000, Loss: 0.0000004963321771\n",
      "Epoch: 15050/20000, Loss: 0.0000004939683436\n",
      "Epoch: 15060/20000, Loss: 0.0000004924437462\n",
      "Epoch: 15070/20000, Loss: 0.0000004909206268\n",
      "Epoch: 15080/20000, Loss: 0.0000004895546795\n",
      "Epoch: 15090/20000, Loss: 0.0000004882228382\n",
      "Epoch: 15100/20000, Loss: 0.0000004869053214\n",
      "Epoch: 15110/20000, Loss: 0.0000004856096325\n",
      "Epoch: 15120/20000, Loss: 0.0000004843257670\n",
      "Epoch: 15130/20000, Loss: 0.0000004830616831\n",
      "Epoch: 15140/20000, Loss: 0.0000004818042498\n",
      "Epoch: 15150/20000, Loss: 0.0000004805563663\n",
      "Epoch: 15160/20000, Loss: 0.0000004793169524\n",
      "Epoch: 15170/20000, Loss: 0.0000004780882819\n",
      "Epoch: 15180/20000, Loss: 0.0000004770183750\n",
      "Epoch: 15190/20000, Loss: 0.0000005004237664\n",
      "Epoch: 15200/20000, Loss: 0.0000071676322477\n",
      "Epoch: 15210/20000, Loss: 0.0000090772618933\n",
      "Epoch: 15220/20000, Loss: 0.0000019177905415\n",
      "Epoch: 15230/20000, Loss: 0.0000016080214209\n",
      "Epoch: 15240/20000, Loss: 0.0000006265875641\n",
      "Epoch: 15250/20000, Loss: 0.0000005977945534\n",
      "Epoch: 15260/20000, Loss: 0.0000005063104709\n",
      "Epoch: 15270/20000, Loss: 0.0000004817126751\n",
      "Epoch: 15280/20000, Loss: 0.0000004745490969\n",
      "Epoch: 15290/20000, Loss: 0.0000004715092814\n",
      "Epoch: 15300/20000, Loss: 0.0000004695693008\n",
      "Epoch: 15310/20000, Loss: 0.0000004680061636\n",
      "Epoch: 15320/20000, Loss: 0.0000004665917857\n",
      "Epoch: 15330/20000, Loss: 0.0000004653314249\n",
      "Epoch: 15340/20000, Loss: 0.0000004641323130\n",
      "Epoch: 15350/20000, Loss: 0.0000004629422392\n",
      "Epoch: 15360/20000, Loss: 0.0000004617781428\n",
      "Epoch: 15370/20000, Loss: 0.0000004606313837\n",
      "Epoch: 15380/20000, Loss: 0.0000004594975280\n",
      "Epoch: 15390/20000, Loss: 0.0000004583770874\n",
      "Epoch: 15400/20000, Loss: 0.0000004572638090\n",
      "Epoch: 15410/20000, Loss: 0.0000004561603646\n",
      "Epoch: 15420/20000, Loss: 0.0000004550655603\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 15430/20000, Loss: 0.0000004539749909\n",
      "Epoch: 15440/20000, Loss: 0.0000004528941133\n",
      "Epoch: 15450/20000, Loss: 0.0000004518475691\n",
      "Epoch: 15460/20000, Loss: 0.0000004524774226\n",
      "Epoch: 15470/20000, Loss: 0.0000006670468338\n",
      "Epoch: 15480/20000, Loss: 0.0000175294408109\n",
      "Epoch: 15490/20000, Loss: 0.0000008359942854\n",
      "Epoch: 15500/20000, Loss: 0.0000005728721248\n",
      "Epoch: 15510/20000, Loss: 0.0000005207870117\n",
      "Epoch: 15520/20000, Loss: 0.0000005072410545\n",
      "Epoch: 15530/20000, Loss: 0.0000004989119020\n",
      "Epoch: 15540/20000, Loss: 0.0000004766588120\n",
      "Epoch: 15550/20000, Loss: 0.0000004533236222\n",
      "Epoch: 15560/20000, Loss: 0.0000004463830976\n",
      "Epoch: 15570/20000, Loss: 0.0000004462796426\n",
      "Epoch: 15580/20000, Loss: 0.0000004438300891\n",
      "Epoch: 15590/20000, Loss: 0.0000004427530200\n",
      "Epoch: 15600/20000, Loss: 0.0000004414355317\n",
      "Epoch: 15610/20000, Loss: 0.0000004403407274\n",
      "Epoch: 15620/20000, Loss: 0.0000004392523181\n",
      "Epoch: 15630/20000, Loss: 0.0000004381755332\n",
      "Epoch: 15640/20000, Loss: 0.0000004371222531\n",
      "Epoch: 15650/20000, Loss: 0.0000004360851733\n",
      "Epoch: 15660/20000, Loss: 0.0000004350572169\n",
      "Epoch: 15670/20000, Loss: 0.0000004340404871\n",
      "Epoch: 15680/20000, Loss: 0.0000004330320280\n",
      "Epoch: 15690/20000, Loss: 0.0000004320272922\n",
      "Epoch: 15700/20000, Loss: 0.0000004310369377\n",
      "Epoch: 15710/20000, Loss: 0.0000004301261072\n",
      "Epoch: 15720/20000, Loss: 0.0000004334067967\n",
      "Epoch: 15730/20000, Loss: 0.0000009543279020\n",
      "Epoch: 15740/20000, Loss: 0.0000125368378576\n",
      "Epoch: 15750/20000, Loss: 0.0000036239810015\n",
      "Epoch: 15760/20000, Loss: 0.0000012271975720\n",
      "Epoch: 15770/20000, Loss: 0.0000006157884513\n",
      "Epoch: 15780/20000, Loss: 0.0000004514496368\n",
      "Epoch: 15790/20000, Loss: 0.0000004309222277\n",
      "Epoch: 15800/20000, Loss: 0.0000004394908615\n",
      "Epoch: 15810/20000, Loss: 0.0000004355201213\n",
      "Epoch: 15820/20000, Loss: 0.0000004260440107\n",
      "Epoch: 15830/20000, Loss: 0.0000004245256378\n",
      "Epoch: 15840/20000, Loss: 0.0000004231422395\n",
      "Epoch: 15850/20000, Loss: 0.0000004218463800\n",
      "Epoch: 15860/20000, Loss: 0.0000004207213919\n",
      "Epoch: 15870/20000, Loss: 0.0000004197104033\n",
      "Epoch: 15880/20000, Loss: 0.0000004186921387\n",
      "Epoch: 15890/20000, Loss: 0.0000004177007042\n",
      "Epoch: 15900/20000, Loss: 0.0000004167316661\n",
      "Epoch: 15910/20000, Loss: 0.0000004157726323\n",
      "Epoch: 15920/20000, Loss: 0.0000004148331527\n",
      "Epoch: 15930/20000, Loss: 0.0000004142796683\n",
      "Epoch: 15940/20000, Loss: 0.0000004583880866\n",
      "Epoch: 15950/20000, Loss: 0.0000035771552120\n",
      "Epoch: 15960/20000, Loss: 0.0000009433936725\n",
      "Epoch: 15970/20000, Loss: 0.0000005939918424\n",
      "Epoch: 15980/20000, Loss: 0.0000006123785283\n",
      "Epoch: 15990/20000, Loss: 0.0000006682345202\n",
      "Epoch: 16000/20000, Loss: 0.0000015057599967\n",
      "Epoch: 16010/20000, Loss: 0.0000019904828150\n",
      "Epoch: 16020/20000, Loss: 0.0000008230232424\n",
      "Epoch: 16030/20000, Loss: 0.0000004142077898\n",
      "Epoch: 16040/20000, Loss: 0.0000005410653330\n",
      "Epoch: 16050/20000, Loss: 0.0000004356855072\n",
      "Epoch: 16060/20000, Loss: 0.0000004112072247\n",
      "Epoch: 16070/20000, Loss: 0.0000004382389989\n",
      "Epoch: 16080/20000, Loss: 0.0000013694560721\n",
      "Epoch: 16090/20000, Loss: 0.0000055988289205\n",
      "Epoch: 16100/20000, Loss: 0.0000005928104656\n",
      "Epoch: 16110/20000, Loss: 0.0000007845765708\n",
      "Epoch: 16120/20000, Loss: 0.0000006459562201\n",
      "Epoch: 16130/20000, Loss: 0.0000004218108529\n",
      "Epoch: 16140/20000, Loss: 0.0000004010639145\n",
      "Epoch: 16150/20000, Loss: 0.0000004013054422\n",
      "Epoch: 16160/20000, Loss: 0.0000003990084849\n",
      "Epoch: 16170/20000, Loss: 0.0000003977457368\n",
      "Epoch: 16180/20000, Loss: 0.0000003975277139\n",
      "Epoch: 16190/20000, Loss: 0.0000003959690673\n",
      "Epoch: 16200/20000, Loss: 0.0000003952959560\n",
      "Epoch: 16210/20000, Loss: 0.0000003948154301\n",
      "Epoch: 16220/20000, Loss: 0.0000004015024047\n",
      "Epoch: 16230/20000, Loss: 0.0000006923225442\n",
      "Epoch: 16240/20000, Loss: 0.0000101596415334\n",
      "Epoch: 16250/20000, Loss: 0.0000029345058010\n",
      "Epoch: 16260/20000, Loss: 0.0000007982603165\n",
      "Epoch: 16270/20000, Loss: 0.0000006341828680\n",
      "Epoch: 16280/20000, Loss: 0.0000004561463243\n",
      "Epoch: 16290/20000, Loss: 0.0000004382179384\n",
      "Epoch: 16300/20000, Loss: 0.0000003907057078\n",
      "Epoch: 16310/20000, Loss: 0.0000003931874630\n",
      "Epoch: 16320/20000, Loss: 0.0000003912574300\n",
      "Epoch: 16330/20000, Loss: 0.0000003887503510\n",
      "Epoch: 16340/20000, Loss: 0.0000003871389822\n",
      "Epoch: 16350/20000, Loss: 0.0000003859093169\n",
      "Epoch: 16360/20000, Loss: 0.0000003849631867\n",
      "Epoch: 16370/20000, Loss: 0.0000003841603018\n",
      "Epoch: 16380/20000, Loss: 0.0000003833649203\n",
      "Epoch: 16390/20000, Loss: 0.0000003842289402\n",
      "Epoch: 16400/20000, Loss: 0.0000005118502031\n",
      "Epoch: 16410/20000, Loss: 0.0000021911162094\n",
      "Epoch: 16420/20000, Loss: 0.0000021532405299\n",
      "Epoch: 16430/20000, Loss: 0.0000014800085637\n",
      "Epoch: 16440/20000, Loss: 0.0000005259777254\n",
      "Epoch: 16450/20000, Loss: 0.0000004612242321\n",
      "Epoch: 16460/20000, Loss: 0.0000004398943645\n",
      "Epoch: 16470/20000, Loss: 0.0000003985688579\n",
      "Epoch: 16480/20000, Loss: 0.0000003789471918\n",
      "Epoch: 16490/20000, Loss: 0.0000003807596727\n",
      "Epoch: 16500/20000, Loss: 0.0000003810417581\n",
      "Epoch: 16510/20000, Loss: 0.0000003765584324\n",
      "Epoch: 16520/20000, Loss: 0.0000003748656354\n",
      "Epoch: 16530/20000, Loss: 0.0000003740144621\n",
      "Epoch: 16540/20000, Loss: 0.0000003736937231\n",
      "Epoch: 16550/20000, Loss: 0.0000004051787243\n",
      "Epoch: 16560/20000, Loss: 0.0000047528874347\n",
      "Epoch: 16570/20000, Loss: 0.0000049989985200\n",
      "Epoch: 16580/20000, Loss: 0.0000005764619573\n",
      "Epoch: 16590/20000, Loss: 0.0000004280558699\n",
      "Epoch: 16600/20000, Loss: 0.0000004784831162\n",
      "Epoch: 16610/20000, Loss: 0.0000004601670298\n",
      "Epoch: 16620/20000, Loss: 0.0000004054796250\n",
      "Epoch: 16630/20000, Loss: 0.0000003773828894\n",
      "Epoch: 16640/20000, Loss: 0.0000003738672092\n",
      "Epoch: 16650/20000, Loss: 0.0000003710499072\n",
      "Epoch: 16660/20000, Loss: 0.0000003695097348\n",
      "Epoch: 16670/20000, Loss: 0.0000003683336729\n",
      "Epoch: 16680/20000, Loss: 0.0000003673928859\n",
      "Epoch: 16690/20000, Loss: 0.0000003665769270\n",
      "Epoch: 16700/20000, Loss: 0.0000003657665957\n",
      "Epoch: 16710/20000, Loss: 0.0000003649857945\n",
      "Epoch: 16720/20000, Loss: 0.0000003642240074\n",
      "Epoch: 16730/20000, Loss: 0.0000003634775112\n",
      "Epoch: 16740/20000, Loss: 0.0000003627431511\n",
      "Epoch: 16750/20000, Loss: 0.0000003620139353\n",
      "Epoch: 16760/20000, Loss: 0.0000003612944965\n",
      "Epoch: 16770/20000, Loss: 0.0000003605804011\n",
      "Epoch: 16780/20000, Loss: 0.0000003598744911\n",
      "Epoch: 16790/20000, Loss: 0.0000003591724180\n",
      "Epoch: 16800/20000, Loss: 0.0000003585745674\n",
      "Epoch: 16810/20000, Loss: 0.0000003763909149\n",
      "Epoch: 16820/20000, Loss: 0.0000065080926106\n",
      "Epoch: 16830/20000, Loss: 0.0000072806415119\n",
      "Epoch: 16840/20000, Loss: 0.0000037351910578\n",
      "Epoch: 16850/20000, Loss: 0.0000010309919389\n",
      "Epoch: 16860/20000, Loss: 0.0000005892210879\n",
      "Epoch: 16870/20000, Loss: 0.0000004853379210\n",
      "Epoch: 16880/20000, Loss: 0.0000003989185018\n",
      "Epoch: 16890/20000, Loss: 0.0000003666781083\n",
      "Epoch: 16900/20000, Loss: 0.0000003642628883\n",
      "Epoch: 16910/20000, Loss: 0.0000003591295012\n",
      "Epoch: 16920/20000, Loss: 0.0000003564098279\n",
      "Epoch: 16930/20000, Loss: 0.0000003555063302\n",
      "Epoch: 16940/20000, Loss: 0.0000003545853531\n",
      "Epoch: 16950/20000, Loss: 0.0000003537574003\n",
      "Epoch: 16960/20000, Loss: 0.0000003529972048\n",
      "Epoch: 16970/20000, Loss: 0.0000003522585814\n",
      "Epoch: 16980/20000, Loss: 0.0000003515493461\n",
      "Epoch: 16990/20000, Loss: 0.0000003508544921\n",
      "Epoch: 17000/20000, Loss: 0.0000003501717742\n",
      "Epoch: 17010/20000, Loss: 0.0000003494985208\n",
      "Epoch: 17020/20000, Loss: 0.0000003488354992\n",
      "Epoch: 17030/20000, Loss: 0.0000003481795545\n",
      "Epoch: 17040/20000, Loss: 0.0000003475309711\n",
      "Epoch: 17050/20000, Loss: 0.0000003468864520\n",
      "Epoch: 17060/20000, Loss: 0.0000003462513121\n",
      "Epoch: 17070/20000, Loss: 0.0000003456161153\n",
      "Epoch: 17080/20000, Loss: 0.0000003449860628\n",
      "Epoch: 17090/20000, Loss: 0.0000003443741718\n",
      "Epoch: 17100/20000, Loss: 0.0000003448452901\n",
      "Epoch: 17110/20000, Loss: 0.0000005188088608\n",
      "Epoch: 17120/20000, Loss: 0.0000199903206521\n",
      "Epoch: 17130/20000, Loss: 0.0000011231171584\n",
      "Epoch: 17140/20000, Loss: 0.0000006798676964\n",
      "Epoch: 17150/20000, Loss: 0.0000005472525118\n",
      "Epoch: 17160/20000, Loss: 0.0000004328512375\n",
      "Epoch: 17170/20000, Loss: 0.0000003712901275\n",
      "Epoch: 17180/20000, Loss: 0.0000003485326090\n",
      "Epoch: 17190/20000, Loss: 0.0000003445624941\n",
      "Epoch: 17200/20000, Loss: 0.0000003452030626\n",
      "Epoch: 17210/20000, Loss: 0.0000003437618545\n",
      "Epoch: 17220/20000, Loss: 0.0000003415372021\n",
      "Epoch: 17230/20000, Loss: 0.0000003406991596\n",
      "Epoch: 17240/20000, Loss: 0.0000003399130435\n",
      "Epoch: 17250/20000, Loss: 0.0000003391621703\n",
      "Epoch: 17260/20000, Loss: 0.0000003384611489\n",
      "Epoch: 17270/20000, Loss: 0.0000003377897428\n",
      "Epoch: 17280/20000, Loss: 0.0000003371294497\n",
      "Epoch: 17290/20000, Loss: 0.0000003364845895\n",
      "Epoch: 17300/20000, Loss: 0.0000003358503591\n",
      "Epoch: 17310/20000, Loss: 0.0000003352222961\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 17320/20000, Loss: 0.0000003346021344\n",
      "Epoch: 17330/20000, Loss: 0.0000003339923467\n",
      "Epoch: 17340/20000, Loss: 0.0000003333830136\n",
      "Epoch: 17350/20000, Loss: 0.0000003327815534\n",
      "Epoch: 17360/20000, Loss: 0.0000003321826796\n",
      "Epoch: 17370/20000, Loss: 0.0000003315873869\n",
      "Epoch: 17380/20000, Loss: 0.0000003310097156\n",
      "Epoch: 17390/20000, Loss: 0.0000003319989617\n",
      "Epoch: 17400/20000, Loss: 0.0000007053773743\n",
      "Epoch: 17410/20000, Loss: 0.0000164771190612\n",
      "Epoch: 17420/20000, Loss: 0.0000059495978348\n",
      "Epoch: 17430/20000, Loss: 0.0000017065904103\n",
      "Epoch: 17440/20000, Loss: 0.0000004653302881\n",
      "Epoch: 17450/20000, Loss: 0.0000003384101035\n",
      "Epoch: 17460/20000, Loss: 0.0000003479215991\n",
      "Epoch: 17470/20000, Loss: 0.0000003426916635\n",
      "Epoch: 17480/20000, Loss: 0.0000003355082754\n",
      "Epoch: 17490/20000, Loss: 0.0000003315690265\n",
      "Epoch: 17500/20000, Loss: 0.0000003299271327\n",
      "Epoch: 17510/20000, Loss: 0.0000003291566202\n",
      "Epoch: 17520/20000, Loss: 0.0000003284181105\n",
      "Epoch: 17530/20000, Loss: 0.0000003275553127\n",
      "Epoch: 17540/20000, Loss: 0.0000003267956856\n",
      "Epoch: 17550/20000, Loss: 0.0000003261223185\n",
      "Epoch: 17560/20000, Loss: 0.0000003254533567\n",
      "Epoch: 17570/20000, Loss: 0.0000003248152609\n",
      "Epoch: 17580/20000, Loss: 0.0000003241835600\n",
      "Epoch: 17590/20000, Loss: 0.0000003235705890\n",
      "Epoch: 17600/20000, Loss: 0.0000003229660877\n",
      "Epoch: 17610/20000, Loss: 0.0000003225100045\n",
      "Epoch: 17620/20000, Loss: 0.0000003377326721\n",
      "Epoch: 17630/20000, Loss: 0.0000025178301257\n",
      "Epoch: 17640/20000, Loss: 0.0000013322199948\n",
      "Epoch: 17650/20000, Loss: 0.0000006882193588\n",
      "Epoch: 17660/20000, Loss: 0.0000003704796825\n",
      "Epoch: 17670/20000, Loss: 0.0000003236999930\n",
      "Epoch: 17680/20000, Loss: 0.0000003338730608\n",
      "Epoch: 17690/20000, Loss: 0.0000003236627322\n",
      "Epoch: 17700/20000, Loss: 0.0000003182313435\n",
      "Epoch: 17710/20000, Loss: 0.0000003263564281\n",
      "Epoch: 17720/20000, Loss: 0.0000006901247502\n",
      "Epoch: 17730/20000, Loss: 0.0000102417234302\n",
      "Epoch: 17740/20000, Loss: 0.0000012284600643\n",
      "Epoch: 17750/20000, Loss: 0.0000012514899481\n",
      "Epoch: 17760/20000, Loss: 0.0000003400483024\n",
      "Epoch: 17770/20000, Loss: 0.0000004547637502\n",
      "Epoch: 17780/20000, Loss: 0.0000003248507880\n",
      "Epoch: 17790/20000, Loss: 0.0000003253271075\n",
      "Epoch: 17800/20000, Loss: 0.0000003227069385\n",
      "Epoch: 17810/20000, Loss: 0.0000003164608131\n",
      "Epoch: 17820/20000, Loss: 0.0000003144309346\n",
      "Epoch: 17830/20000, Loss: 0.0000003136061366\n",
      "Epoch: 17840/20000, Loss: 0.0000003129777895\n",
      "Epoch: 17850/20000, Loss: 0.0000003123267334\n",
      "Epoch: 17860/20000, Loss: 0.0000003116944924\n",
      "Epoch: 17870/20000, Loss: 0.0000003111503588\n",
      "Epoch: 17880/20000, Loss: 0.0000003106196118\n",
      "Epoch: 17890/20000, Loss: 0.0000003103631343\n",
      "Epoch: 17900/20000, Loss: 0.0000003190090467\n",
      "Epoch: 17910/20000, Loss: 0.0000009800197631\n",
      "Epoch: 17920/20000, Loss: 0.0000082553578977\n",
      "Epoch: 17930/20000, Loss: 0.0000012131664562\n",
      "Epoch: 17940/20000, Loss: 0.0000004825357109\n",
      "Epoch: 17950/20000, Loss: 0.0000006917848054\n",
      "Epoch: 17960/20000, Loss: 0.0000003650785914\n",
      "Epoch: 17970/20000, Loss: 0.0000003287582047\n",
      "Epoch: 17980/20000, Loss: 0.0000003224680540\n",
      "Epoch: 17990/20000, Loss: 0.0000003119058078\n",
      "Epoch: 18000/20000, Loss: 0.0000003080969293\n",
      "Epoch: 18010/20000, Loss: 0.0000003079439352\n",
      "Epoch: 18020/20000, Loss: 0.0000003067756609\n",
      "Epoch: 18030/20000, Loss: 0.0000003059240612\n",
      "Epoch: 18040/20000, Loss: 0.0000003052746251\n",
      "Epoch: 18050/20000, Loss: 0.0000003046881147\n",
      "Epoch: 18060/20000, Loss: 0.0000003043301433\n",
      "Epoch: 18070/20000, Loss: 0.0000003172379479\n",
      "Epoch: 18080/20000, Loss: 0.0000016037697605\n",
      "Epoch: 18090/20000, Loss: 0.0000013221449535\n",
      "Epoch: 18100/20000, Loss: 0.0000003247780569\n",
      "Epoch: 18110/20000, Loss: 0.0000004402035358\n",
      "Epoch: 18120/20000, Loss: 0.0000003208630517\n",
      "Epoch: 18130/20000, Loss: 0.0000003194863893\n",
      "Epoch: 18140/20000, Loss: 0.0000008350999678\n",
      "Epoch: 18150/20000, Loss: 0.0000096307567219\n",
      "Epoch: 18160/20000, Loss: 0.0000003307044381\n",
      "Epoch: 18170/20000, Loss: 0.0000012630810033\n",
      "Epoch: 18180/20000, Loss: 0.0000003674327900\n",
      "Epoch: 18190/20000, Loss: 0.0000004035738357\n",
      "Epoch: 18200/20000, Loss: 0.0000003081728153\n",
      "Epoch: 18210/20000, Loss: 0.0000003182300645\n",
      "Epoch: 18220/20000, Loss: 0.0000003016363905\n",
      "Epoch: 18230/20000, Loss: 0.0000002988045935\n",
      "Epoch: 18240/20000, Loss: 0.0000002983397849\n",
      "Epoch: 18250/20000, Loss: 0.0000002976561291\n",
      "Epoch: 18260/20000, Loss: 0.0000002970055846\n",
      "Epoch: 18270/20000, Loss: 0.0000002964684143\n",
      "Epoch: 18280/20000, Loss: 0.0000002959473591\n",
      "Epoch: 18290/20000, Loss: 0.0000002953959495\n",
      "Epoch: 18300/20000, Loss: 0.0000002948802660\n",
      "Epoch: 18310/20000, Loss: 0.0000002943876041\n",
      "Epoch: 18320/20000, Loss: 0.0000002942428239\n",
      "Epoch: 18330/20000, Loss: 0.0000003153265595\n",
      "Epoch: 18340/20000, Loss: 0.0000028731087696\n",
      "Epoch: 18350/20000, Loss: 0.0000013037273447\n",
      "Epoch: 18360/20000, Loss: 0.0000008868259442\n",
      "Epoch: 18370/20000, Loss: 0.0000009502510352\n",
      "Epoch: 18380/20000, Loss: 0.0000006287998531\n",
      "Epoch: 18390/20000, Loss: 0.0000003679890028\n",
      "Epoch: 18400/20000, Loss: 0.0000002951883289\n",
      "Epoch: 18410/20000, Loss: 0.0000003063927636\n",
      "Epoch: 18420/20000, Loss: 0.0000002959233427\n",
      "Epoch: 18430/20000, Loss: 0.0000002935099985\n",
      "Epoch: 18440/20000, Loss: 0.0000002920370150\n",
      "Epoch: 18450/20000, Loss: 0.0000002914461277\n",
      "Epoch: 18460/20000, Loss: 0.0000002906061809\n",
      "Epoch: 18470/20000, Loss: 0.0000002900115135\n",
      "Epoch: 18480/20000, Loss: 0.0000002894679483\n",
      "Epoch: 18490/20000, Loss: 0.0000002889351265\n",
      "Epoch: 18500/20000, Loss: 0.0000002884202104\n",
      "Epoch: 18510/20000, Loss: 0.0000002881128296\n",
      "Epoch: 18520/20000, Loss: 0.0000003142163507\n",
      "Epoch: 18530/20000, Loss: 0.0000035515072341\n",
      "Epoch: 18540/20000, Loss: 0.0000006480372008\n",
      "Epoch: 18550/20000, Loss: 0.0000006519329645\n",
      "Epoch: 18560/20000, Loss: 0.0000004493055314\n",
      "Epoch: 18570/20000, Loss: 0.0000003404009021\n",
      "Epoch: 18580/20000, Loss: 0.0000004348410698\n",
      "Epoch: 18590/20000, Loss: 0.0000030524490739\n",
      "Epoch: 18600/20000, Loss: 0.0000002952614579\n",
      "Epoch: 18610/20000, Loss: 0.0000004463673804\n",
      "Epoch: 18620/20000, Loss: 0.0000004697996587\n",
      "Epoch: 18630/20000, Loss: 0.0000003766863301\n",
      "Epoch: 18640/20000, Loss: 0.0000003147000029\n",
      "Epoch: 18650/20000, Loss: 0.0000002867619173\n",
      "Epoch: 18660/20000, Loss: 0.0000002852965792\n",
      "Epoch: 18670/20000, Loss: 0.0000002863549753\n",
      "Epoch: 18680/20000, Loss: 0.0000002842715787\n",
      "Epoch: 18690/20000, Loss: 0.0000002842210449\n",
      "Epoch: 18700/20000, Loss: 0.0000003084587661\n",
      "Epoch: 18710/20000, Loss: 0.0000011892554994\n",
      "Epoch: 18720/20000, Loss: 0.0000051507258831\n",
      "Epoch: 18730/20000, Loss: 0.0000003320106998\n",
      "Epoch: 18740/20000, Loss: 0.0000008410715964\n",
      "Epoch: 18750/20000, Loss: 0.0000004431363436\n",
      "Epoch: 18760/20000, Loss: 0.0000002818873668\n",
      "Epoch: 18770/20000, Loss: 0.0000002971816855\n",
      "Epoch: 18780/20000, Loss: 0.0000002913959349\n",
      "Epoch: 18790/20000, Loss: 0.0000002840243667\n",
      "Epoch: 18800/20000, Loss: 0.0000002801382379\n",
      "Epoch: 18810/20000, Loss: 0.0000002782741717\n",
      "Epoch: 18820/20000, Loss: 0.0000002779640340\n",
      "Epoch: 18830/20000, Loss: 0.0000002772484891\n",
      "Epoch: 18840/20000, Loss: 0.0000002769224352\n",
      "Epoch: 18850/20000, Loss: 0.0000002773447534\n",
      "Epoch: 18860/20000, Loss: 0.0000002984279490\n",
      "Epoch: 18870/20000, Loss: 0.0000014623383322\n",
      "Epoch: 18880/20000, Loss: 0.0000032025445762\n",
      "Epoch: 18890/20000, Loss: 0.0000012190625966\n",
      "Epoch: 18900/20000, Loss: 0.0000006219455599\n",
      "Epoch: 18910/20000, Loss: 0.0000004669824705\n",
      "Epoch: 18920/20000, Loss: 0.0000003225232490\n",
      "Epoch: 18930/20000, Loss: 0.0000002870375511\n",
      "Epoch: 18940/20000, Loss: 0.0000002899220419\n",
      "Epoch: 18950/20000, Loss: 0.0000002776736494\n",
      "Epoch: 18960/20000, Loss: 0.0000002743556138\n",
      "Epoch: 18970/20000, Loss: 0.0000002735565374\n",
      "Epoch: 18980/20000, Loss: 0.0000002730498352\n",
      "Epoch: 18990/20000, Loss: 0.0000002726818877\n",
      "Epoch: 19000/20000, Loss: 0.0000002767093576\n",
      "Epoch: 19010/20000, Loss: 0.0000006943247399\n",
      "Epoch: 19020/20000, Loss: 0.0000003048389488\n",
      "Epoch: 19030/20000, Loss: 0.0000008209943871\n",
      "Epoch: 19040/20000, Loss: 0.0000002878034024\n",
      "Epoch: 19050/20000, Loss: 0.0000003164829820\n",
      "Epoch: 19060/20000, Loss: 0.0000002896458682\n",
      "Epoch: 19070/20000, Loss: 0.0000004991485412\n",
      "Epoch: 19080/20000, Loss: 0.0000083146805991\n",
      "Epoch: 19090/20000, Loss: 0.0000033129222174\n",
      "Epoch: 19100/20000, Loss: 0.0000003128479023\n",
      "Epoch: 19110/20000, Loss: 0.0000006676036719\n",
      "Epoch: 19120/20000, Loss: 0.0000002731082702\n",
      "Epoch: 19130/20000, Loss: 0.0000003098571710\n",
      "Epoch: 19140/20000, Loss: 0.0000002870692981\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 19150/20000, Loss: 0.0000002709690534\n",
      "Epoch: 19160/20000, Loss: 0.0000002681487672\n",
      "Epoch: 19170/20000, Loss: 0.0000002674422035\n",
      "Epoch: 19180/20000, Loss: 0.0000002670088577\n",
      "Epoch: 19190/20000, Loss: 0.0000002665093461\n",
      "Epoch: 19200/20000, Loss: 0.0000002658512983\n",
      "Epoch: 19210/20000, Loss: 0.0000002654477669\n",
      "Epoch: 19220/20000, Loss: 0.0000002650240276\n",
      "Epoch: 19230/20000, Loss: 0.0000002651368618\n",
      "Epoch: 19240/20000, Loss: 0.0000002818022722\n",
      "Epoch: 19250/20000, Loss: 0.0000014423060293\n",
      "Epoch: 19260/20000, Loss: 0.0000026766690553\n",
      "Epoch: 19270/20000, Loss: 0.0000020856584797\n",
      "Epoch: 19280/20000, Loss: 0.0000002832030077\n",
      "Epoch: 19290/20000, Loss: 0.0000005555041298\n",
      "Epoch: 19300/20000, Loss: 0.0000002952670570\n",
      "Epoch: 19310/20000, Loss: 0.0000002952520788\n",
      "Epoch: 19320/20000, Loss: 0.0000002659535312\n",
      "Epoch: 19330/20000, Loss: 0.0000002691279519\n",
      "Epoch: 19340/20000, Loss: 0.0000002640538810\n",
      "Epoch: 19350/20000, Loss: 0.0000002623800128\n",
      "Epoch: 19360/20000, Loss: 0.0000002617937582\n",
      "Epoch: 19370/20000, Loss: 0.0000002613029721\n",
      "Epoch: 19380/20000, Loss: 0.0000002608515217\n",
      "Epoch: 19390/20000, Loss: 0.0000002604695339\n",
      "Epoch: 19400/20000, Loss: 0.0000002625035336\n",
      "Epoch: 19410/20000, Loss: 0.0000004516330137\n",
      "Epoch: 19420/20000, Loss: 0.0000016421136024\n",
      "Epoch: 19430/20000, Loss: 0.0000005000003398\n",
      "Epoch: 19440/20000, Loss: 0.0000004424524889\n",
      "Epoch: 19450/20000, Loss: 0.0000005532427281\n",
      "Epoch: 19460/20000, Loss: 0.0000020310590116\n",
      "Epoch: 19470/20000, Loss: 0.0000007014294852\n",
      "Epoch: 19480/20000, Loss: 0.0000007174294296\n",
      "Epoch: 19490/20000, Loss: 0.0000004934865956\n",
      "Epoch: 19500/20000, Loss: 0.0000002713176457\n",
      "Epoch: 19510/20000, Loss: 0.0000003014120864\n",
      "Epoch: 19520/20000, Loss: 0.0000002578826752\n",
      "Epoch: 19530/20000, Loss: 0.0000002575335145\n",
      "Epoch: 19540/20000, Loss: 0.0000002808322961\n",
      "Epoch: 19550/20000, Loss: 0.0000011486541780\n",
      "Epoch: 19560/20000, Loss: 0.0000050498661039\n",
      "Epoch: 19570/20000, Loss: 0.0000002837661270\n",
      "Epoch: 19580/20000, Loss: 0.0000008756480270\n",
      "Epoch: 19590/20000, Loss: 0.0000003760225127\n",
      "Epoch: 19600/20000, Loss: 0.0000002650494935\n",
      "Epoch: 19610/20000, Loss: 0.0000002803505765\n",
      "Epoch: 19620/20000, Loss: 0.0000002681763362\n",
      "Epoch: 19630/20000, Loss: 0.0000002595753017\n",
      "Epoch: 19640/20000, Loss: 0.0000002557929690\n",
      "Epoch: 19650/20000, Loss: 0.0000002537178148\n",
      "Epoch: 19660/20000, Loss: 0.0000002528554717\n",
      "Epoch: 19670/20000, Loss: 0.0000002525453908\n",
      "Epoch: 19680/20000, Loss: 0.0000002520957878\n",
      "Epoch: 19690/20000, Loss: 0.0000002519740576\n",
      "Epoch: 19700/20000, Loss: 0.0000002583454091\n",
      "Epoch: 19710/20000, Loss: 0.0000005800474696\n",
      "Epoch: 19720/20000, Loss: 0.0000106130355562\n",
      "Epoch: 19730/20000, Loss: 0.0000014137307289\n",
      "Epoch: 19740/20000, Loss: 0.0000011341508070\n",
      "Epoch: 19750/20000, Loss: 0.0000002822935699\n",
      "Epoch: 19760/20000, Loss: 0.0000003915983484\n",
      "Epoch: 19770/20000, Loss: 0.0000002594743194\n",
      "Epoch: 19780/20000, Loss: 0.0000002609357921\n",
      "Epoch: 19790/20000, Loss: 0.0000002577183693\n",
      "Epoch: 19800/20000, Loss: 0.0000002513647530\n",
      "Epoch: 19810/20000, Loss: 0.0000002495804949\n",
      "Epoch: 19820/20000, Loss: 0.0000002489629765\n",
      "Epoch: 19830/20000, Loss: 0.0000002491555335\n",
      "Epoch: 19840/20000, Loss: 0.0000002976341591\n",
      "Epoch: 19850/20000, Loss: 0.0000030571861771\n",
      "Epoch: 19860/20000, Loss: 0.0000006406158946\n",
      "Epoch: 19870/20000, Loss: 0.0000005589987495\n",
      "Epoch: 19880/20000, Loss: 0.0000002498667300\n",
      "Epoch: 19890/20000, Loss: 0.0000002856131971\n",
      "Epoch: 19900/20000, Loss: 0.0000002710714284\n",
      "Epoch: 19910/20000, Loss: 0.0000004617180025\n",
      "Epoch: 19920/20000, Loss: 0.0000043129575715\n",
      "Epoch: 19930/20000, Loss: 0.0000009867836752\n",
      "Epoch: 19940/20000, Loss: 0.0000008973337344\n",
      "Epoch: 19950/20000, Loss: 0.0000005467013580\n",
      "Epoch: 19960/20000, Loss: 0.0000003546713288\n",
      "Epoch: 19970/20000, Loss: 0.0000002886098116\n",
      "Epoch: 19980/20000, Loss: 0.0000002616313566\n",
      "Epoch: 19990/20000, Loss: 0.0000002457180130\n",
      "Epoch: 20000/20000, Loss: 0.0000002459976827\n"
     ]
    }
   ],
   "source": [
    "# Create LEM instance\n",
    "lem = LEM(input_size, hidden_size, output_size, dt=0.1)\n",
    "\n",
    "# Loss and optimizer\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = torch.optim.Adam(lem.parameters(), lr=0.001)\n",
    "\n",
    "# Training loop\n",
    "for epoch in range(num_epochs):\n",
    "    # Forward pass\n",
    "    output = lem(input_tensor)\n",
    "    loss = criterion(output, target_tensor)\n",
    "\n",
    "    # Backward and optimize\n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "\n",
    "    # Print progress\n",
    "    if (epoch + 1) % 10 == 0:\n",
    "        print(f'Epoch: {epoch + 1}/{num_epochs}, Loss: {loss.item():.16f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "1da66d64",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([1, 1, 256])\n",
      "torch.Size([1, 20, 256])\n"
     ]
    }
   ],
   "source": [
    "print(test_tensor.shape)\n",
    "prediction_tensor = torch.zeros(1, 20, 256).float()\n",
    "print(prediction_tensor.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "a0543daa",
   "metadata": {},
   "outputs": [],
   "source": [
    "with torch.no_grad():\n",
    "    prediction = lem(test_tensor)\n",
    "    prediction = prediction.view(1, 1, 256).float()\n",
    "    prediction_tensor[:, 0, :] = prediction\n",
    "    for i in range(19):\n",
    "        prediction = lem(prediction)\n",
    "        prediction = prediction.view(1, 1, 256).float()\n",
    "        prediction_tensor[:, i+1, :] = prediction\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e6b9bad",
   "metadata": {},
   "source": [
    "### Four different types of error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "9c33b0f5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exact Solution\n",
    "\n",
    "u_test = u_1.T\n",
    "u_test_full = u_test[80:100, :]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "00c8fa22",
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction_tensor = torch.squeeze(prediction_tensor)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "334bf0be",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([20, 256])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Extrapolation\n",
    "\n",
    "k1 = ( prediction_tensor - u_test_full)**2\n",
    "u_test_full_tensor = torch.tensor(u_test_full**2)\n",
    "u_test_full_tensor.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "01080c4f",
   "metadata": {},
   "source": [
    "### L^2 norm error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "33c17bd8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Relative Error Test:  0.043790851178600466 %\n"
     ]
    }
   ],
   "source": [
    "# Compute the relative L2 error norm (generalization error)\n",
    "relative_error_test = torch.mean(k1)/ torch.mean(u_test_full_tensor)\n",
    "\n",
    "print(\"Relative Error Test: \", relative_error_test.item(), \"%\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "62b523ef",
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (4209523232.py, line 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;36m  File \u001b[0;32m\"/tmp/ipykernel_22052/4209523232.py\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m    2+\u001b[0m\n\u001b[0m      ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "2+"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa3fa35b",
   "metadata": {},
   "source": [
    "### Max absolute norm error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "01cf8637",
   "metadata": {},
   "outputs": [],
   "source": [
    "R_abs = torch.max(torch.abs(prediction_tensor - u_test_full))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b3e65482",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(R_abs)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "678810f2",
   "metadata": {},
   "source": [
    "### Explained variance score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "02c72385",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "\n",
    "a = prediction_tensor\n",
    "b = u_test_full\n",
    "# Assuming 'a' is your predicted values (model's predictions) and 'b' is the true values (ground truth)\n",
    "# Make sure 'a' and 'b' are PyTorch tensors\n",
    "# a = torch.tensor(a)\n",
    "b = torch.tensor(b)\n",
    "# Calculate the mean of 'b'\n",
    "mean_b = torch.mean(b)\n",
    "\n",
    "# Calculate the Explained Variance Score\n",
    "numerator = torch.var(b - a)  # Variance of the differences between 'b' and 'a'\n",
    "denominator = torch.var(b)    # Variance of 'b'\n",
    "evs = 1 - numerator / denominator\n",
    "\n",
    "print(\"Explained Variance Score:\", evs.item())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f664baf6",
   "metadata": {},
   "source": [
    "### Mean absolute error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "43fc2394",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Compute the relative L2 error norm (generalization error)\n",
    "relative_error_test = torch.mean(torch.abs(prediction_tensor - u_test_full))\n",
    "\n",
    "print(\"Relative Error Test: \", relative_error_test, \"%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75e50e9e",
   "metadata": {},
   "source": [
    "### Contour plot for PINN (80 percent) and (20 percentage lem prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8e3eec75",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(prediction_tensor.shape)\n",
    "prediction_tensor = torch.squeeze(prediction_tensor)\n",
    "input_tensor = torch.squeeze(input_tensor)\n",
    "\n",
    "conc_u = torch.squeeze(input_tensor)\n",
    "concatenated_tensor = torch.cat((conc_u, prediction_tensor), dim=0)\n",
    "\n",
    "x1 = np.linspace(-1, 1, 256)\n",
    "t1 = np.linspace(0, 1, 99)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e393a1e0",
   "metadata": {},
   "source": [
    "### Snapshot time plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "04f91104",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "# Create the figure and axis objects with reduced width\n",
    "fig, ax = plt.subplots(figsize=(5, 5))  # You can adjust the width (7 inches) and height (5 inches) as needed\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "final_time_output = prediction_tensor[3, :]\n",
    "final_out = final_time_output.detach().numpy().reshape(-1, 1)\n",
    "final_true = u_1[:, 83].reshape(-1, 1)\n",
    "\n",
    "# Plot the data with red and blue lines, one with dotted and one with solid style\n",
    "ax.plot(x, final_out, color='red', linestyle='dotted', linewidth=12, label='Prediction')\n",
    "ax.plot(x, final_true, color='blue', linestyle='solid', linewidth=7, label='True')\n",
    "\n",
    "\n",
    "# Set the axis labels with bold font weight\n",
    "ax.set_xlabel(r\"${x}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "ax.set_ylabel(r\"${u(x, t)}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "\n",
    "# Set the title with bold font weight\n",
    "ax.set_title(r\"${t = 0.83}$\", fontsize=26, color='black', fontweight='bold')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 3\n",
    "ax.set_xticks([-1, 0, 1])\n",
    "ax.set_yticks([-1, 0, 1])\n",
    "\n",
    "# Set tick labels fontweight to bold and increase font size\n",
    "ax.tick_params(axis='both', which='major', labelsize=20, width=2, length=10)\n",
    "\n",
    "# # Set the fontweight for tick labels to bold\n",
    "# for tick in ax.get_xticklabels() + ax.get_yticklabels():\n",
    "#     tick.set_weight('bold')\n",
    "\n",
    "# Set the spines linewidth to bold\n",
    "ax.spines['top'].set_linewidth(2)\n",
    "ax.spines['right'].set_linewidth(2)\n",
    "ax.spines['bottom'].set_linewidth(2)\n",
    "ax.spines['left'].set_linewidth(2)\n",
    "\n",
    "# Set the legend\n",
    "# ax.legend()\n",
    "\n",
    "plt.savefig('LEM_0.83_20.pdf', dpi=500, bbox_inches=\"tight\")\n",
    "#plt.savefig('lem_0.83_20.png', dpi=500, bbox_inches=\"tight\")\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3d96305e",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "# Create the figure and axis objects with reduced width\n",
    "fig, ax = plt.subplots(figsize=(5, 5))  # You can adjust the width (7 inches) and height (5 inches) as needed\n",
    "\n",
    "\n",
    "\n",
    "final_time_output = prediction_tensor[-2, :]\n",
    "final_out = final_time_output.detach().numpy().reshape(-1, 1)\n",
    "final_true = u_1[:, -2].reshape(-1, 1)\n",
    "\n",
    "# Plot the data with red and blue lines, one with dotted and one with solid style\n",
    "ax.plot(x, final_out, color='red', linestyle='dotted', linewidth=12, label='Prediction')\n",
    "ax.plot(x, final_true, color='blue', linestyle='solid', linewidth=7, label='True')\n",
    "\n",
    "\n",
    "# Set the axis labels with bold font weight\n",
    "ax.set_xlabel(r\"${x}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "ax.set_ylabel(r\"${u(x, t)}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "\n",
    "# Set the title with bold font weight\n",
    "ax.set_title(r\"${t = 0.98}$\", fontsize=26, color='black', fontweight='bold')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 3\n",
    "ax.set_xticks([-1, 0, 1])\n",
    "ax.set_yticks([-1, 0, 1])\n",
    "\n",
    "# Set tick labels fontweight to bold and increase font size\n",
    "ax.tick_params(axis='both', which='major', labelsize=20, width=2, length=10)\n",
    "\n",
    "# # Set the fontweight for tick labels to bold\n",
    "# for tick in ax.get_xticklabels() + ax.get_yticklabels():\n",
    "#     tick.set_weight('bold')\n",
    "\n",
    "# Set the spines linewidth to bold\n",
    "ax.spines['top'].set_linewidth(2)\n",
    "ax.spines['right'].set_linewidth(2)\n",
    "ax.spines['bottom'].set_linewidth(2)\n",
    "ax.spines['left'].set_linewidth(2)\n",
    "\n",
    "# Set the legend\n",
    "# ax.legend()\n",
    "\n",
    "plt.savefig('LEM_0.98_20.pdf', dpi=500, bbox_inches=\"tight\")\n",
    "#plt.savefig('lem_0.98_20.png', dpi=500, bbox_inches=\"tight\")\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d962cd38",
   "metadata": {},
   "source": [
    "### Contour plot where 80 percent for PINN solution and 20 percent for lem solution"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5011fef9",
   "metadata": {},
   "source": [
    "### Exact contour"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8d6ac2bb",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import FixedLocator\n",
    "\n",
    "# Assuming you have defined concatenated_tensor as a PyTorch tensor\n",
    "# concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)\n",
    "\n",
    "# Convert concatenated_tensor to a NumPy array\n",
    "concatenated_array = u_1.T\n",
    "\n",
    "# Define custom color levels\n",
    "x = np.linspace(-1, 1, concatenated_array.shape[1])  # Replace 0 and 1 with your actual x range\n",
    "t = np.linspace(0, 1, concatenated_array.shape[0])  # Replace 0 and 1 with your actual t range\n",
    "X, T = np.meshgrid(x, t)\n",
    "\n",
    "# Define custom color levels using the minimum and maximum from the NumPy array\n",
    "c_levels = np.linspace(np.min(concatenated_array), np.max(concatenated_array), 400)\n",
    "\n",
    "# Plot the contour with interpolated data\n",
    "plt.figure(figsize=(20, 5))\n",
    "plt.pcolormesh(T, X, concatenated_array, shading='auto', cmap='coolwarm')\n",
    "\n",
    "# Set the fontweight for axis labels to regular (not bold)\n",
    "plt.xlabel(\"$t$\", fontsize=26)\n",
    "plt.ylabel(\"$x$\", fontsize=26)\n",
    "plt.title(\"$u(x, t)$\", fontsize=26)\n",
    "\n",
    "# Set tick labels fontweight to regular (not bold) and increase font size\n",
    "plt.tick_params(axis='both', which='major', labelsize=20, width=3, length=10)\n",
    "\n",
    "# Set the fontweight for tick labels to regular (not bold)\n",
    "for tick in plt.gca().get_xticklabels() + plt.gca().get_yticklabels():\n",
    "    tick.set_weight('normal')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 5\n",
    "num_ticks = 5\n",
    "x_ticks = np.linspace(np.min(T), np.max(T), num_ticks)\n",
    "y_ticks = np.linspace(np.min(X), np.max(X), num_ticks)\n",
    "\n",
    "plt.gca().xaxis.set_major_locator(FixedLocator(x_ticks))\n",
    "plt.gca().yaxis.set_major_locator(FixedLocator(y_ticks))\n",
    "\n",
    "cbar1 = plt.colorbar()\n",
    "# Set the number of ticks for the color bar with uniformly distributed numbers\n",
    "num_ticks = 5\n",
    "c_ticks = np.linspace(np.min(concatenated_array), np.max(concatenated_array), num_ticks)\n",
    "cbar1.set_ticks(c_ticks)\n",
    "\n",
    "# Set the fontweight and fontsize for color bar tick labels\n",
    "for t in cbar1.ax.get_yticklabels():\n",
    "    t.set_weight('normal')\n",
    "    t.set_fontsize(26)  # Increase the font size for color bar tick labels\n",
    "\n",
    "# Increase the size of numbers on axis and color bar\n",
    "plt.xticks(fontsize=26)\n",
    "plt.yticks(fontsize=26)\n",
    "\n",
    "# Increase the tick size and width of the color bar\n",
    "cbar1.ax.tick_params(axis='both', which='major', labelsize=30, width=3,  length=10)\n",
    "\n",
    "#plt.savefig('Contour_Exact.pdf', dpi=500, bbox_inches=\"tight\")\n",
    "plt.savefig('contour_exact.jpeg', dpi=500, bbox_inches=\"tight\")\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c034dcf7",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import FixedLocator\n",
    "\n",
    "# Assuming you have defined concatenated_tensor as a PyTorch tensor\n",
    "# concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)\n",
    "\n",
    "# Convert concatenated_tensor to a NumPy array\n",
    "concatenated_array = concatenated_tensor.numpy()\n",
    "\n",
    "# Define custom color levels\n",
    "x = np.linspace(-1, 1, concatenated_array.shape[1])  # Replace 0 and 1 with your actual x range\n",
    "t = np.linspace(0, 1, concatenated_array.shape[0])  # Replace 0 and 1 with your actual t range\n",
    "X, T = np.meshgrid(x, t1)\n",
    "\n",
    "# Define custom color levels using the minimum and maximum from the NumPy array\n",
    "c_levels = np.linspace(np.min(concatenated_array), np.max(concatenated_array), 400)\n",
    "\n",
    "# Plot the contour with interpolated data\n",
    "plt.figure(figsize=(20, 5))\n",
    "plt.pcolormesh(T, X, concatenated_array, shading='auto', cmap='coolwarm')\n",
    "\n",
    "# Set the fontweight for axis labels to regular (not bold)\n",
    "plt.xlabel(\"$t$\", fontsize=26)\n",
    "plt.ylabel(\"$x$\", fontsize=26)\n",
    "plt.title(\"$u(x, t)$\", fontsize=26)\n",
    "\n",
    "# Set tick labels fontweight to regular (not bold) and increase font size\n",
    "plt.tick_params(axis='both', which='major', labelsize=20, width=3, length=10)\n",
    "\n",
    "# Set the fontweight for tick labels to regular (not bold)\n",
    "for tick in plt.gca().get_xticklabels() + plt.gca().get_yticklabels():\n",
    "    tick.set_weight('normal')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 5\n",
    "num_ticks = 5\n",
    "x_ticks = np.linspace(np.min(T), np.max(T), num_ticks)\n",
    "y_ticks = np.linspace(np.min(X), np.max(X), num_ticks)\n",
    "\n",
    "plt.gca().xaxis.set_major_locator(FixedLocator(x_ticks))\n",
    "plt.gca().yaxis.set_major_locator(FixedLocator(y_ticks))\n",
    "\n",
    "cbar1 = plt.colorbar()\n",
    "# Set the number of ticks for the color bar with uniformly distributed numbers\n",
    "num_ticks = 5\n",
    "c_ticks = np.linspace(np.min(concatenated_array), np.max(concatenated_array), num_ticks)\n",
    "cbar1.set_ticks(c_ticks)\n",
    "\n",
    "# Set the fontweight and fontsize for color bar tick labels\n",
    "for t in cbar1.ax.get_yticklabels():\n",
    "    t.set_weight('normal')\n",
    "    t.set_fontsize(26)  # Increase the font size for color bar tick labels\n",
    "\n",
    "# Increase the size of numbers on axis and color bar\n",
    "plt.xticks(fontsize=26)\n",
    "plt.yticks(fontsize=26)\n",
    "\n",
    "# Increase the tick size and width of the color bar\n",
    "cbar1.ax.tick_params(axis='both', which='major', labelsize=30, width=3,  length=10)\n",
    "\n",
    "# Add a dotted line at t = 0.8\n",
    "plt.axvline(x=0.8, color='black', linestyle='dotted', linewidth=5)\n",
    "\n",
    "#plt.savefig('Contour_LEM_20.pdf', dpi=500, bbox_inches=\"tight\")\n",
    "plt.savefig('contour_LEM_20.jpeg', dpi=500, bbox_inches=\"tight\")\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b7ab04a2",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
